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

Matplotlib散点图按类别设置不同标记的技术实现问题

问题描述

我需要绘制x1与x2的散点图,要求当mark值为1时使用+标记,mark值为0时使用圆点标记。file.csv的结构包含x1、x2、mark(取值仅为0或1),具体数据如下:

x1x2mark
120
941
051
260

我编写的代码如下:

df = pd.read_csv('file.csv')
print(df)
x1 = df['x1'].to_numpy()
x2 = df['x2'].to_numpy()
mark = df['class'].to_numpy()
        
figure, ax = plt.subplots()

for i in range(0,80,1):
    if mark[i] > 0:
        ax.plot(x1[i], color="red", marker='o')
    else:
        ax.plot(x1[i], color="blue", marker='x')

希望实现的效果:以x1为横轴、x2为纵轴,mark=1用+标记,mark=0用圆点标记的散点图。


修正后的代码
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('file.csv')
print(df)

# 按mark值拆分数据
group_mark0 = df[df['mark'] == 0]
group_mark1 = df[df['mark'] == 1]

fig, ax = plt.subplots()

# 绘制mark=0的圆点散点
ax.scatter(group_mark0['x1'], group_mark0['x2'], marker='o', color='blue', label='mark=0')
# 绘制mark=1的加号散点
ax.scatter(group_mark1['x1'], group_mark1['x2'], marker='+', color='red', label='mark=1')

# 添加图表元素
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.legend()

plt.show()

关键修正说明
  • 列名匹配:原代码错误调用df['class'],改为df['mark']以匹配数据结构
  • 循环逻辑优化:用pandas布尔索引直接拆分数据组,替代易出问题的固定范围循环,避免索引越界
  • 散点图函数使用:改用scatter专门绘制散点,同时传入x1、x2坐标,符合散点图的核心需求
  • 标记匹配需求:调整标记样式,mark=0用圆点o,mark=1用加号+,完全匹配要求
  • 图表可读性优化:添加坐标轴标签和图例,让图表信息更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:12:42