You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Matplotlib与ListedColormap绘制鸢尾花数据集:散点图颜色异常求助

解决鸢尾花数据集散点图按标签分色的问题

嘿,我一眼就看出问题啦!你已经把鸢尾花数据整理得很到位,但散点图没按标签分色的原因是**plt.scatter()缺少了关键的颜色映射依据参数**。咱们来快速修正:

问题根源

你只设置了cmap=cmap_bold,但没有告诉Matplotlib「根据哪个字段来分配颜色」——也就是缺失了c参数,这个参数需要传入你的标签列,让不同的标签值对应到你定义的颜色映射里。

修正后的完整代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 加载并整理数据
iris = load_iris()
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['label'] = iris.target

# 定义三类鸢尾花对应的颜色
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

# 绘制散点图:关键是添加c=data['label']参数
plt.scatter(
    data['sepal length (cm)'], 
    data['sepal width (cm)'], 
    c=data['label'],  # 核心:根据标签列分配颜色
    cmap=cmap_bold,
    edgecolor='white'  # 可选:给点加白色边框,让不同颜色点更清晰
)

# 优化图表标注
plt.title("Sepal Width vs Sepal Length (By Iris Species)")
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Sepal Width (cm)')

# 添加图例(因为scatter默认不会自动生成分类图例,手动创建)
from matplotlib.patches import Patch
legend_elements = [
    Patch(color='#FF0000', label='Setosa'),
    Patch(color='#00FF00', label='Versicolor'),
    Patch(color='#0000FF', label='Virginica')
]
plt.legend(handles=legend_elements, loc='upper right')

plt.show()

关键说明

  • c=data['label']:这是核心!把标签列(值为0、1、2)传入,Matplotlib会自动将每个标签值对应到cmap_bold里的颜色(0→红色,1→绿色,2→蓝色)
  • 新增的edgecolor='white'是可选优化,能让密集的点边界更清晰,避免颜色混在一起
  • 手动添加图例是因为散点图的默认图例是基于颜色数值的,咱们需要把标签值映射成对应的鸢尾花品种名称,让图表更易读

这样修改后,你就能看到三类鸢尾花的散点分别显示红、绿、蓝三种颜色啦!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:53:12