2015-01-07 43 views
1

点与标签通常在X给出,Y形式如何在不重组数组的情况下绘制散点图例?

X是一个多维阵列中,y是标签/类属于X的每个点

我想要做的事:

import matplotlib.pyplot as plt 
import numpy as np 

X = [[0,1],[1,2],[2,3],[3,4]] 
X = np.array(X) 

y = np.array([0,0,1,2]) 


myCmap = np.array(['r', 'g', 'b']) 
myLabelMap = np.array(['car', 'bicycle', 'plane']) 

plt.scatter(X[:, 0], X[:, 1], color=myCmap[y], label=myLabelMap[y]) 
plt.legend(loc='upper right') 

plt.show() 

但是,这会弄乱图例,正如您在图例部分中看到的那样,它会绘制所有点的所有标签。

有没有办法解决这个问题,而不把X放入不同的数组?

+1

请提供[MCVE](http://stackoverflow.com/help/mcve)。 – Ffisegydd

+0

@Ffisegydd抱歉,什么是mcve? – hihell

+0

这是一个链接到一个网页,MCVE是在那里的细节。 – Ffisegydd

回答

0

首先找出唯一标签以及它们引用的点。然后,绘制有标签的点,和其他人没有标签:

import matplotlib.pyplot as plt 
import numpy as np 

X = [[0,1],[1,2],[2,3],[3,4]] 
X = np.array(X) 

y = np.array([0,0,1,2]) 


myCmap = np.array(['r', 'g', 'b']) 
myLabelMap = np.array(['car', 'bicycle', 'plane']) 

y_unique,id_unique = unique(y,return_index=True) 
X_unique = X[id_unique] 
X = asarray(X,dtype=float) 

for j,yj in enumerate(y_unique): 
    plt.scatter(X_unique[j, 0], X_unique[j, 1], color=myCmap[yj], label=myLabelMap[yj]) 

X[id_unique] = nan 
plt.scatter(X[:, 0], X[:, 1], color=myCmap[y]) 

plt.legend(loc='upper right') 

plt.show() 

又见this问题。

+0

恐怕你的解决方案不正确,图例应该显示一组状态/标签/类,而不是所有点的标签。例如,我有100万分和3个班,传说中应该包含所有3个班级,而不是100万条 – hihell

+0

好点,我没有注意到图例中有2个红色条目。我已经更新了答案,现在应该可以满足您的需求。这有点棘手。 – gg349

相关问题