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

Python中基于Matplotlib绘制带二分类标签着色的二维散点图技术求助

解决Matplotlib散点图按二分类标签着色的问题

嘿,别发愁!你之前对scatter函数的用法有点误解——它完全支持同时传入两个特征作为横纵轴,还能轻松根据标签给点设置对应颜色。我给你一步步拆解实现方法:

方法1:一次性绘制所有点,手动映射标签到颜色

这种方法适合快速生成图表,我们先把标签和对应颜色做个映射,再传给scatter的c参数:

import matplotlib.pyplot as plt
import numpy as np

# 假设你的X是numpy数组(如果是列表可以转成np.array)
# 这里先模拟生成100×2的特征和对应标签,你可以替换成自己的数据
X = np.random.randn(100, 2)
y = np.random.choice([-1, 1], size=100)

# 拆分横、纵轴对应的特征
x_axis = X[:, 0]
y_axis = X[:, 1]

# 建立标签到颜色的映射关系
color_mapping = {-1: 'red', 1: 'yellow'}
# 把每个标签转换成对应的点颜色
point_colors = [color_mapping[label] for label in y]

# 绘制散点图
plt.scatter(x_axis, y_axis, c=point_colors, alpha=0.7)

# 添加图表基础元素
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('二分类数据散点图(按标签着色)')

# 手动添加图例:因为直接用c参数无法自动生成图例,所以创建虚拟点来对应
from matplotlib.lines import Line2D
legend_items = [
    Line2D([0], [0], marker='o', color='w', markerfacecolor='red', markersize=10, label='标签-1'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='yellow', markersize=10, label='标签1')
]
plt.legend(handles=legend_items)

plt.show()

方法2:分开绘制两类标签的点

如果想要更灵活的控制(比如给不同类设置不同的标记样式),可以先筛选出两类数据再分别绘制:

import matplotlib.pyplot as plt
import numpy as np

# 模拟数据(替换成你自己的X和y即可)
X = np.random.randn(100, 2)
y = np.random.choice([-1, 1], size=100)

# 筛选出标签为-1和1的对应数据
data_neg = X[y == -1]
data_pos = X[y == 1]

# 分别绘制两类点,直接通过label参数生成图例
plt.scatter(data_neg[:, 0], data_neg[:, 1], color='red', alpha=0.7, label='标签-1')
plt.scatter(data_pos[:, 0], data_pos[:, 1], color='yellow', alpha=0.7, label='标签1')

# 添加图表元素
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.title('二分类数据散点图(按标签着色)')
plt.legend()

plt.show()

这两种方法都能实现你想要的效果,第二种方法的优势是可以直接通过label参数自动生成图例,不需要手动创建元素,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:12:42