繁体   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