我有一个这样的数据框:
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是我的数据框。
如果我没有提及颜色选项,它默认会绘制两种颜色。但我想把自己的颜色选项。
有什么建议吗?
答案 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})
在情节中,实际上有8个类别,但为了保持图例的可管理性,我将其中一些映射到相同的颜色。
另外,请注意,pandas会按照遇到类别的顺序从颜色列表中分配颜色,因此如果一组行中有多种颜色,则需要使用pandas.DataFrame.sort_values (...)你的类别变量。