2015-04-22 62 views
0

我有这样一个数据帧:绘制在大熊猫平行坐标具有不同颜色

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”的观察值都是相同的颜色,而对于“Against”的观察值是相同的颜色。有2740个obs,因此需要一些透明度以提供更好的可视化。

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

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

其中Y_embed是我的数据帧。

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

有什么建议?

回答

2

颜色参数只是一个颜色列表,每个颜色一种颜色,而不是每行一种颜色。你可以用绿色曲线为一个集群和品红色像这样的其他群集:

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

为了使线透明,你可以使用RGBA值的colors

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

这里第一组是红色和部分透明,第二组是绿色和大多数不透明。

+0

任何想法如何让线条有点透明,因为我有很多线?其次,即使在我上面的解决方案中,我也会说要将它变为一个群集(“For”)和其他(“反对”)的绿色。因此,它将所有观察结果与“For”一起作为红色,从而给出单独的课程。不知道为什么它不这样做 – Baktaawar

+0

看到我的编辑。我不明白你的第二个问题。 – Molly

0

您可以通过在每种情况下重复调用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.DataFrame。 sort_values(...)在你的类别变量上。