Pandas绘制时序大数据集:重采样与X轴优化方案问询
解决时序数据折线图卡顿与X轴刻度杂乱问题
核心前提:先把时间列转为datetime类型
不管用哪种方案,第一步必须把DateTime列转换成pandas的datetime类型并设为索引,否则时序处理和刻度优化都没法正常工作:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.dates import MinuteLocator, DateFormatter # 读取数据 df = pd.read_csv("C:/WG/Temp/TimeSeries.csv", sep=',') # 转换时间列并设为索引 df['DateTime'] = pd.to_datetime(df['DateTime'], format='%d/%m/%Y %H:%M:%S') df = df.set_index('DateTime').drop(columns=['Temp', 'no'])
方案一:重采样降维(解决卡顿)+ 优化X轴刻度
按分钟取均值把4万条数据压缩到几千条,彻底解决卡顿,同时通过matplotlib的日期定位器控制X轴刻度显示间隔:
# 按分钟重采样,取Light的均值 resampled_df = df['Light'].resample('1min').mean() # 绘制折线图 fig, ax = plt.subplots(figsize=(12,6)) resampled_df.plot(ax=ax, kind='line', label='Light (1min avg)') # 设置X轴刻度:每隔30分钟显示一个刻度,自定义日期格式 ax.xaxis.set_major_locator(MinuteLocator(interval=30)) ax.xaxis.set_major_formatter(DateFormatter('%H:%M %d/%m')) # 旋转刻度标签避免重叠 plt.xticks(rotation=45) plt.legend() plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
- 可以根据需求调整
resample的频率(比如'5min'按5分钟采样),以及MinuteLocator的interval参数(比如interval=60显示每小时刻度)。
方案二:保留所有数据点 + 自定义X轴刻度间隔
如果必须保留全部4万条数据,通过手动设置X轴显示的刻度位置和标签,只展示每隔n个点的时间:
# 绘制全数据折线图 fig, ax = plt.subplots(figsize=(12,6)) df['Light'].plot(ax=ax, kind='line', label='Light (raw data)') # 设置每隔1000个点显示一个X轴刻度(可根据需求调整n值) n = 1000 ticks = df.index[::n] ax.set_xticks(ticks) # 自定义日期显示格式 ax.set_xticklabels(ticks.strftime('%H:%M %d/%m'), rotation=45) plt.legend() plt.tight_layout() plt.show()
- 注意
n的取值要根据数据总量调整,比如4万条数据设n=1000会显示40个刻度,既不会太挤也能看清时间趋势。 - 如果觉得折线太密,可以把
kind='line'换成kind='scatter',但4万点的散点图还是可能卡顿,优先推荐方案一。
内容的提问来源于stack exchange,提问作者Snorlax
相关产品推荐
相关产品推荐

