如何根据2列的值进行绘制

时间:2019-10-03 12:51:50

标签: python pandas matplotlib

df = 

     id_easy  latitude  longitude  cluster
0         a1   45.1076     7.4920        0
0         b1   45.1064     7.5013        0
1         c1   44.9498     7.5010        1
1         d1   44.9656     7.5084        1
2         e1   45.0846     7.5277        2
2         f1   45.1650     7.7950        2

我想形象化:

  • id_easy a1的{​​{1}} b1 cluster的经度和纬度值以不同的颜色显示,其余数据为灰色
  • 0 id_easy的{​​{1}} c1 d1的经度和纬度值以不同的颜色显示,其余数据为灰色
  • cluster 1的{​​{1}} id_easy e1的经度和纬度值以不同的颜色显示,其余数据为灰色

我有这个:

f1

但是它为我提供了cluster的所有栗色颜色,但我希望它们使用不同的颜色

所需的输出:

For every values of id_easy I have different color

对于id_easy的每个值,我都有不同的颜色

2 个答案:

答案 0 :(得分:2)

这可以通过seaborn完成:

for cluster in df.cluster.unique():

    # mask the cluster of interest
    is_cluster = df.cluster.eq(cluster)

    # plot the other clusters in gray
    ax = df[~is_cluster].plot.scatter(x='latitude',y='longitude', c='gray')

    # plot the cluster of interest in different colors
    sns.scatterplot(data=df[is_cluster],
                    x='latitude', 
                    y='longitude',
                    hue='id_easy',
                    ax=ax)

    # you can do other stuff with ax here
    # ax.set_title(...)...

    plt.show()

最后,您将获得3个地块:

enter image description here enter image description here enter image description here

答案 1 :(得分:1)

您的问题对我来说还不是很清楚,这是您要寻找的吗?

enter image description here

如果这是我使用的代码:

df2=df.set_index('cluster')

fig, axs = plt.subplots(figsize=(10, 12), nrows=3,ncols=1,constrained_layout=True)

for clus in df2.index.unique():
    axs[clus].plot(df2.latitude,df2.longitude,'o',color='grey',markersize=12)
    axs[clus].plot(df2.loc[clus].latitude.iloc[0],df2.loc[clus].longitude.iloc[0],'o',markersize=12)
    axs[clus].plot(df2.loc[clus].latitude.iloc[1],df2.loc[clus].longitude.iloc[1],'o',markersize=12)

    axs[clus].set_xlabel('Latitude')
    axs[clus].set_ylabel('Longitude')
    axs[clus].set_title('Cluster '+str(clus))