Matplotlib散点图按类别设置不同标记的技术实现问题
问题描述
我需要绘制x1与x2的散点图,要求当mark值为1时使用+标记,mark值为0时使用圆点标记。file.csv的结构包含x1、x2、mark(取值仅为0或1),具体数据如下:
| x1 | x2 | mark |
|---|---|---|
| 1 | 2 | 0 |
| 9 | 4 | 1 |
| 0 | 5 | 1 |
| 2 | 6 | 0 |
我编写的代码如下:
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
相关产品推荐
相关产品推荐

