如何创建含744个数据点的31天X轴以匹配Y轴数据绘图
解决31天744小时数据的X轴匹配问题
嘿,我懂你的困扰!31天刚好是744小时(31×24),咱们要做的就是让X轴精准对应每一个小时的数据点,这样才能和你的Y轴数据完美适配。你之前用np.arange踩的坑在于,手动计算步长很容易出错,而且arange是左闭右开的区间逻辑,大概率会导致最终生成的列表长度和744对不上。
下面给你两种简单靠谱的解决方案:
方案1:用时间序列生成精准X轴(推荐,更直观)
用pandas的date_range可以直接生成连续的小时级时间序列,指定生成744个点就刚好对应31天。这样绘图时X轴还能直接显示日期/天数,可读性拉满:
import pandas as pd import matplotlib.pyplot as plt # 读取Y数据,squeeze()确保数据是一维的(如果Excel里是单列的话) y = pd.read_excel(r'C:/Users/user/Documents/project/Data/Data-y.xlsx').squeeze() # 生成744小时的时间序列,起始日期可以随便设,频率选'H'(小时) x = pd.date_range(start='2024-01-01', periods=744, freq='H') plt.figure(figsize=(8, 5)) plt.plot(x, y, 'b') # 设置X轴刻度为每天的起始点,显示"Day 1"到"Day 31",旋转标签避免重叠 plt.xticks(x[::24], [f'Day {i+1}' for i in range(31)], rotation=45) plt.xlabel('Days') plt.ylabel('Y Value') plt.title('Hourly Data Over 31 Days') plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
方案2:用数值生成均匀分布的X轴
如果不需要时间标签,只是要0到31的数值轴,用np.linspace就可以精准生成744个均匀分布的点,它会自动帮你计算正确的步长,而且包含两端的数值:
import pandas as pd import matplotlib.pyplot as plt import numpy as np y = pd.read_excel(r'C:/Users/user/Documents/project/Data/Data-y.xlsx').squeeze() # 生成从0到31的744个均匀点,完美匹配Y轴长度 x = np.linspace(0, 31, 744) plt.figure(figsize=(8, 5)) plt.plot(x, y, 'b') # 设置X轴刻度为每天的整数点,显示0到31 plt.xticks(np.arange(0, 32, 1)) plt.xlabel('Days') plt.ylabel('Y Value') plt.title('Hourly Data Over 31 Days') plt.show()
这两种方法都能保证X轴的长度和你的744个Y数据完全一致,而且X轴的刻度会清晰显示31天的标记,完美解决你之前的问题。
内容的提问来源于stack exchange,提问作者Arwildo
相关产品推荐
相关产品推荐

