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

Matplotlib绘制双Y轴时序图时X轴刻度过多、生成缓慢及索引相关问题咨询

回答你的双Y轴图表性能与Pandas索引问题

首先针对你遇到的三个问题逐一拆解解答:

1. 如何限制X轴显示的刻度数量?

当然可以!Matplotlib提供了多种灵活的方式控制X轴刻度的数量和显示频率,针对你的日期时间型X轴,推荐两种实用方法:

方法1:按时间间隔设置刻度(更贴合业务场景)

比如你想每天显示一个刻度,可以借助matplotlib.dates模块的定位器和格式化器实现:

import matplotlib.dates as mdates

# 在创建ax1之后添加以下代码
# 设置主刻度为每天一个,interval可调整为2(每两天)、6(每6小时)等
ax1.xaxis.set_major_locator(mdates.DayLocator(interval=1))
# 设置日期显示格式,比如只显示年-月-日
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

方法2:直接限制最大刻度数量

如果不想按时间间隔,只想固定显示N个刻度,可用MaxNLocator强制限制:

from matplotlib.ticker import MaxNLocator

# 最多显示10个X轴刻度,nbins可按需调整
ax1.xaxis.set_major_locator(MaxNLocator(nbins=10))

2. X轴刻度过多是否是图表生成缓慢的原因?

是的,这是核心原因。你的数据是两周的毫秒级采样,意味着X轴会有上百万个潜在刻度点(即使每秒一个采样,两周也有120多万个点)。Matplotlib需要为每个刻度计算位置、渲染标签,尤其是日期时间类型的刻度,还要额外做格式化解析,这会极大消耗CPU资源,导致生成速度骤降。

你测试时的差异也能佐证:小样本下用默认整数索引时,数字格式化的开销远低于日期时间,加上刻度数量少,所以速度快很多。

3. 关于Pandas索引的理解盲区

你遇到的KeyError: 'Date Time'有两个关键原因:

  • 首先是列名拼写错误:你的CSV列名是Time date(从set_index('Time date')可看出),但你尝试访问的是Date Time;
  • 其次是索引与列的区别:当执行set_index('Time date')后,原来的Time date列会被移到DataFrame的索引位置,不再属于普通列(可以用temperatureData.columns查看当前列名,会发现没有Time date了),所以直接用列名访问会报错。

解决方法:

  • 如果只是需要X轴的日期时间数据,直接用temperatureData.index即可(你代码里已经这么做了,是正确的);
  • 如果想同时保留Time date作为列和索引,可以在set_index时添加drop=False参数:
    temperatureData = temperatureData.set_index('Time date', drop=False)
    
    这样之后你既能用temperatureData.index获取索引,也能用temperatureData['Time date']访问该列。

额外性能优化建议

除了限制刻度,你还可以对毫秒级数据做降采样,比如按分钟或小时聚合(取均值/最大值等),大幅减少数据量,进一步提升图表生成速度:

# 按小时聚合温度和通风数据,取均值
temperatureData_resampled = temperatureData.resample('H').mean()
# 之后用降采样后的数据画图
x = temperatureData_resampled.index
y1_data1 = temperatureData_resampled['Temperature1']
# ... 其他数据同理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:13:12