2015-04-22 119 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(...)在你的類別變量上。