在不同颜色的熊猫中绘制平行坐标

时间:2015-04-22 16:20:45

标签: python numpy pandas matplotlib

我有一个这样的数据框:

    0   1   2   3   4   5   6   7   8   9   Cluster
0   0.018420    0.003357    0.002626    -0.015603   -0.009005   -0.023671   -0.016316   0.066504    -0.039526   0.037820    For
1   0.017684    0.003434    -0.003338   -0.003904   -0.021871   -0.009454   -0.013772   -0.004610   -0.006150   -0.005746   For
2   0.018857    0.003987    0.001749    -0.019840   0.011184    -0.020451   0.082434    -0.008789   0.000449    0.005445    Against
3   0.020454    0.026437    0.036899    0.027168    -0.018483   -0.001076   0.005831    -0.002117   -0.011288   0.007491    For
4   0.018006    0.005365    0.001298    -0.006953   0.017034    0.006931    0.000268    0.001615    0.016707    -0.017798   Against

Df.columns
Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, u'Cluster'], dtype='object')

最后一栏'群集'指定观察是否属于" For"群集或"反对"簇。

我想做一个情节,以便所有的观察结果都是针对" For"同一颜色,而#34;反对"是相同的颜色。有2740个障碍物,因此也需要一些线条透明度以提供更好的可视化效果。

我做了以下操作,但即使我指定了颜色选项,它也会为两个类绘制相同的红色。

parallel_coordinates(Y_embed,'Cluster',color=["r" if c=="For" else "g" for c in Y_embed.Cluster])

Y_embed是我的数据框。

如果我没有提及颜色选项,它默认会绘制两种颜色。但我想把自己的颜色选项。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

颜色参数只是一个颜色列表,每个聚类有一种颜色,而不是每行一种颜色。您可以为一个群集创建一个绿色的图,为另一个群集创建一个洋红色的图,如下所示:

parallel_coordinates(data,'Cluster',color=['g','m'])

要使线条透明,您可以使用colors的rgba值。

parallel_coordinates(data,'Cluster',color=[[1,0,0,0.2],[0,1,0,0.9]])

这里第一组是红色且部分透明,第二组是绿色,大部分是不透明的。

答案 1 :(得分:1)

您可以通过在每种情况下重复调用具有不同值的parallel_coordinates来控制行的透明度,例如

lowColorList=["k","k","y","y"]
midColorList=["c","b","g"]
topColorList=["r"]

plt.close()
plt.gcf().clear()    
fig, ax = plt.subplots()

parallel_coordinates(lowDf, "Cat",color=lowColorList, alpha=0.1)

parallel_coordinates(midDf, "Cat", color=midColorList, alpha=0.4)

parallel_coordinates(topDf, "Cat", color=topColorList, alpha=0.9)
# remove the pandas legend
plt.gca().legend_.remove()

plt.xlabel("Each Component of X is Shown on its Own Vertical Axis")
plt.ylabel("Values")
plt.title("Finding the Optimal Value of X")
# add new legend
topHandle =    mlines.Line2D([],[], color='red',   ls="-", label="Best")
midHandleOne = mlines.Line2D([],[], color='blue',  ls="-", label="Next Best")
lowHandle =    mlines.Line2D([],[], color='black', ls="-", label="Worst")
plt.legend(handles=[topHandle, midHandleOne,lowHandle],loc=1, prop={'size':10})

parallel coordinates with multiple calls at different alpha

在情节中,实际上有8个类别,但为了保持图例的可管理性,我将其中一些映射到相同的颜色。

另外,请注意,pandas会按照遇到类别的顺序从颜色列表中分配颜色,因此如果一组行中有多种颜色,则需要使用pandas.DataFrame.sort_values (...)你的类别变量。

相关问题