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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:40:00