Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在matplotlib 3.1.1中使用图例元素设置散点图图例标签_Python_Matplotlib_Plot_Legend_Scatter - Fatal编程技术网

Python 在matplotlib 3.1.1中使用图例元素设置散点图图例标签

Python 在matplotlib 3.1.1中使用图例元素设置散点图图例标签,python,matplotlib,plot,legend,scatter,Python,Matplotlib,Plot,Legend,Scatter,我刚刚将matplotlib升级到3.1.1版,正在尝试使用legend_元素 我在一个由30000张平展的灰度图像组成的数据集上,对PCA中的前两个分量进行散点绘制。每个图像都被标记为四个主要类别之一(配件、服装、鞋类、个人护理)。我通过创建一个值为0到3的颜色列,按照“主类别”对绘图进行了颜色编码 我已经阅读了PathCollection.legend_元素的文档,但尚未成功合并'func'或'fmt'参数。 此外,我还尝试了以下示例: ###为颜色代码创建列 masterCat_代码=

我刚刚将matplotlib升级到3.1.1版,正在尝试使用legend_元素

我在一个由30000张平展的灰度图像组成的数据集上,对PCA中的前两个分量进行散点绘制。每个图像都被标记为四个主要类别之一(配件、服装、鞋类、个人护理)。我通过创建一个值为0到3的颜色列,按照“主类别”对绘图进行了颜色编码

我已经阅读了PathCollection.legend_元素的文档,但尚未成功合并'func'或'fmt'参数。

此外,我还尝试了以下示例:

###为颜色代码创建列
masterCat_代码={'Accessories':0,'Apparel':1,'Foother':2,'Personal Care':3}
df['colors']=df['masterCategory']。应用(lambda x:masterCat_代码[x])
###创建散点图
图,ax=plt.子批次(图尺寸=(8,8))
散点=最大散点(*完整pca.T,s=.1,c=df['colors'],标签=df['masterCategory'],cmap='viridis')
###使用图例元素
legend1=ax.legend(*散布.legend_元素(num=[0,1,2,3]),loc=“左上”,title=“类别代码”)
ax.添加艺术家(legend1)
plt.show()
生成的图例标签为0、1、2、3。(在定义“散布”时,无论我是否指定label=df['masterCategory'],都会发生这种情况)。我想标签说配件,服装,鞋类,个人护理

有没有一种方法可以通过legend_元素实现这一点

注意:由于数据集很大,预处理的计算量很大,因此我编写了一个更易于复制的示例:

fake_data = np.array([[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]])
fake_df = pd.DataFrame(fake_data, columns=['X', 'Y'])
groups = np.array(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'])
fake_df['Group'] = groups

group_codes = {k:idx for idx, k in enumerate(fake_df.Group.unique())}
fake_df['colors'] = fake_df['Group'].apply(lambda x: group_codes[x])
fig, ax = plt.subplots()
scatter = ax.scatter(fake_data[:,0], fake_data[:,1], c=fake_df['colors'])
legend = ax.legend(*scatter.legend_elements(num=[0,1,2]), loc="upper left", title="Group \nCodes")
ax.add_artist(legend)
plt.show()

解决方案 感谢Beingernest的重要性


类似于
ax.legend(handles=scatter.legend_元素(num=[0,1,2,3])[0],labels=masterCat_-codes.keys())
应该可以工作。没有我就帮不上忙了。谢谢,这成功了!为了清晰起见,我添加了一个可复制的示例:)请不要回答问题中的问题。(那么问题是什么?)使用回答按钮。对于那些想知道的人,
scatter
应该像你的问题一样定义
scatter=ax.scatter(…)
group_codes = {k:idx for idx, k in enumerate(fake_df.Group.unique())}
fake_df['colors'] = fake_df['Group'].apply(lambda x: group_codes[x])
fig, ax = plt.subplots(figsize=(8,8))
ax.scatter(fake_data[:,0], fake_data[:,1], c=fake_df['colors'])
ax.legend(handles=scatter.legend_elements(num=[0,1,2,3])[0], labels=group_codes.keys())
plt.show()