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

matplotlib处理DateTime问题:血压数据绘图X轴非连续异常

问题原因

你代码中核心错误是调用dt.strftime('%d/%m/%y %H:%M')把解析完成的datetime时间类型数据转换成了字符串类型。matplotlib无法识别字符串中的时间先后和间隔逻辑,只会将每个字符串作为独立的分类标签按输入顺序排列,因此会出现时间间隔等距、所有数据点都生成刻度的异常表现。

修正方案
  1. 首先保留datetime原生类型作为X轴输入,不要提前转换为格式化字符串,若需要自定义时间显示格式,使用matplotlib自带的日期工具实现即可:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 修正:保留datetime类型,不转字符串
dataframe["DateTime"] = pd.to_datetime(df[["Year", "Month", "Day", "Hour", "Minute"]])
x = dataframe.DateTime
a1 = pd.Series(dataframe["BP1 Sys"])
a2 = pd.Series(dataframe["BP2 Dia"])
a3 = pd.Series(dataframe["MAP"])

plt.title("血压变化趋势")
plt.plot(x, a1, marker="^", label="收缩压")
plt.plot(x, a2, marker="v", label="舒张压")
plt.axhline(y=130, color="orange", linestyle="--", label="收缩压阈值")
plt.axhline(y=60, color="purple", linestyle="--", label="舒张压阈值")
plt.plot(x, a3, linestyle="dotted", color='green', label="平均动脉压")
plt.bar(x=x, height=a1 - a2, bottom=a2, width=0.05, alpha=.2)
plt.fill_between(x, a1, a2, color='blue', alpha=.1)
plt.legend()

# 自定义X轴时间格式和刻度密度
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M'))
# 可根据数据时间跨度调整刻度间隔,比如跨度为1天可设为每3小时一个刻度
plt.gca().xaxis.set_major_locator(mdates.HourLocator(interval=3))
# 自动旋转刻度避免重叠
plt.gcf().autofmt_xdate()
plt.show()
  1. 上述修改既保留了连续时间轴的逻辑,也能实现你需要的时间显示格式,matplotlib会自动根据时间间隔排布数据点位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:10