Pandas同图绘制SYS/DIA散点及同时间点竖线连接实现方法
问题排查与修正方案
原代码散点分画布的原因
- 列名匹配错误:DataFrame中时间列的列名为
Seconds,原代码绘图时传入的x轴列名是elapsed_seconds,和实际列名不符 - 坐标轴未复用:第二次调用
df.plot.scatter()时没有指定ax参数,pandas会自动创建新画布绘图,导致两个散点图分属不同画布。另外原代码重复调用了两次plt.legend(),属于冗余代码。
同时间点竖线连接实现方法
使用matplotlib的vlines()方法即可批量绘制所有垂直线,不需要逐行循环:该方法支持批量传入x轴坐标、每条线的y轴起始值、y轴结束值,一次完成所有同时间点SYS、DIA的连线。
修正后完整可运行代码
import pandas as pd import matplotlib.pyplot as plt # 构造样例数据 data = {'Seconds': [10,20,30,40], 'SYS': [95,103,99,112], 'DIA': [56,75,62,70]} df = pd.DataFrame(data) plt.figure(figsize=(14,6)) # 绘制SYS散点,绑定当前画布的坐标轴 ax = df.plot.scatter( x='Seconds', y='SYS', color='red', grid=True, label='SYS(收缩压)', ax=plt.gca() ) # 绘制DIA散点,复用同一个坐标轴,保证在同一张画布显示 df.plot.scatter( x='Seconds', y='DIA', color='blue', grid=True, label='DIA(舒张压)', ax=ax ) # 批量绘制同时间点连接SYS和DIA的竖线 ax.vlines( x=df['Seconds'], ymin=df['DIA'], ymax=df['SYS'], color='gray', linewidth=1.5 ) # 统一配置图表样式 plt.xticks(rotation=45) ax.set_xlabel('time (seconds)') ax.set_ylabel('血压值(mmHg)') plt.legend(loc='upper left') plt.tight_layout() plt.show()
代码说明
- 调用绘图方法时传入
ax参数指定要绑定的坐标轴,是pandas绘图时实现多图层叠加的标准写法 - 竖线选用低饱和度灰色,避免干扰散点数据的展示,可根据需求自行调整
color、linewidth参数修改竖线样式 - 增加了
plt.tight_layout()自动调整布局,避免旋转后的x轴刻度被画布边缘截断。
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

