簡體   English   中英

如何將圖例添加到散點圖

[英]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.

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