[英]How to add a legend to scatterplot
我正在為機器學習課程做練習。 我將矩陣形式的圖像數據集附加到矩陣中,然后添加到數據矩陣中,然后對其進行標准化,然后計算出主要成分。 Labels是一個數組,其中包含每個圖像的標簽(包含標簽的子目錄),我需要可視化主要部件對,在本部分中是前兩個。 這位教授的建議是使用matplotli.scatter函數,我發現seaborn.scatterplot函數看起來更好,但是在沒有兩個函數的情況下,我都設法在圖例上添加了標簽名稱。
pca = PCA()
X_t = pca.fit_transform(datamatrix)
X_r = pca.inverse_transform(X_t)
plt.figure(figsize=(25,5))
colours = ['r','g','b','p']
plt.subplot(1, 3, 1)
sns.scatterplot(X_t[:,0], X_t[:,1], hue=labels, palette=colours, legend='full')
plt.title('PC 1 and 2')
我是Python和機器學習庫的新手
編輯:按照建議,我嘗試修改鱈魚:
data = {"x" : X_t[:,0], "y" : X_t[:,1], "label" : labels}
sns.scatterplot(x="x", y="y", hue="label", palette=colours, data=data, legend='full')
但是我得到了相同的結果:我有圖例,但是沒有捕獲標簽的名稱
在顯示圖之前,使用以下命令添加圖例:
plt.legend()
Seaborn scatterplot
將自動創建圖例,如文檔中的第二個示例所示。 但是,它確實需要使數據具有類似於字典的結構,這在熊貓數據幀中很常見。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = {"x" : np.random.rand(10),
"y" : np.random.rand(10),
"label" : np.random.choice(["Label 1", "Label 2"], size=10)}
sns.scatterplot(x="x", y="y", hue="label", data=data)
plt.show()
要通過matplotlib的scatter
實現相同的功能,您需要自己創建圖例,這確實有點麻煩,但可能有助於理解。
import numpy as np
import matplotlib.pyplot as plt
data = {"x" : np.random.rand(10),
"y" : np.random.rand(10),
"label" : np.random.choice(["Label 1", "Label 2"], size=10)}
labels, inv = np.unique(data["label"], return_inverse=True)
scatter = plt.scatter(x="x", y="y", c = inv, data=data)
handles = [plt.Line2D([],[],marker="o", ls="",
color=scatter.cmap(scatter.norm(yi))) for yi in np.unique(inv)]
plt.legend(handles, labels)
plt.show()
另請參閱將圖例添加到散點圖(PCA)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.