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