簡體   English   中英

如何在不重組數組的情況下繪制圖例以獲取散點?

[英]how to plot legend for scatter points without reorganising array?

帶標簽的點通常以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放入不同的數組中?

首先,您要找到唯一的標簽,以及它們所指的要點。 然后,您可以用標簽繪制這些點,而其他則不帶有標簽:

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()

另請參閱問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM