You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Matplotlib为分类数据点添加对应颜色的图例?

解决PCA降维散点图的类别图例问题

嘿,作为Python绘图新手完全懂这种花了好久还是卡壳的感觉!我来帮你搞定这个图例显示的问题~

你现在的问题核心是:直接用plt.scatterc参数指定类别时,Matplotlib没法自动识别每个颜色对应的类别标签,所以图例没法正常显示。这是因为c参数只是把类别数值映射成颜色,但没有明确告诉绘图工具“每个数值对应一个独立类别”。

给你两种新手友好的解决方案:

方法一:Matplotlib原生循环绘制(最直观)

手动为每个类别单独绘制散点,让每个类别对应一个图例条目,逻辑清晰好理解:

import matplotlib.pyplot as plt

# 定义你的类别列表(根据你的数据是[0,1,2])
categories = [0, 1, 2]
# 可选:自定义每个类别的颜色,也可以让Matplotlib自动分配
category_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1']

plt.figure(figsize=(15,8))
# 循环每个类别,筛选对应数据并绘制
for cat, color in zip(categories, category_colors):
    # 筛选出当前类别的所有数据点
    category_points = reduced_dataset[y.Gender == cat]
    # 绘制散点时指定label,这是图例显示的关键!
    plt.scatter(category_points[:, 0], category_points[:, 1], 
                color=color, label=f'类别 {cat}')

plt.xlabel('PC 1')
plt.ylabel('PC 2')
# 给图例加个标题,更清晰
plt.legend(title='类别标签')
# 别忘了加这句!你原来的代码没写,可能也会导致图无法正常显示
plt.show()

方法二:用Seaborn简化代码(更省心)

如果愿意用Seaborn库,一行代码就能自动识别类别并生成图例,省去循环的麻烦:

先确保安装Seaborn:pip install seaborn

然后运行以下代码:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(15,8))
# 使用scatterplot,hue参数直接指定类别列,自动生成图例
sns.scatterplot(x=reduced_dataset[:,0], y=reduced_dataset[:,1], 
                hue=y.Gender, palette='Set2')
plt.xlabel('PC 1')
plt.ylabel('PC 2')
plt.legend(title='类别标签')
plt.show()

另外提醒下:你原来代码最后有个plt.figure(),这会创建一个空的新图,建议删掉换成plt.show(),才能正常显示你画的PCA散点图。

内容的提问来源于stack exchange,提问作者m_fer23

火山引擎 最新活动