使用Matplotlib绘制日期X轴双直方图:无数据显示问题求助
解决Matplotlib双日期X轴数据不显示问题
看起来你是想按日期展示两组数据的对比,但用错了绘图方法哦!hist()函数是用来绘制数据频率分布直方图的,它会自动统计数据的区间分布,而不是直接把每个数据点对应到日期X轴上——这就是为什么你能看到日期轴,却看不到对应数据条的原因。
如果你的需求是每个日期对应一组数据值的对比展示,应该用bar()函数绘制柱状图,同时把日期数据正确关联到X轴上。下面是修正后的完整代码:
import numpy as np import matplotlib.pyplot as plt from datetime import datetime, timedelta # 准备数据 y1 = np.array([123, 456, 789, 10, 5, 123, 456, 789, 10, 5]) y2 = np.array([123, 456, 789, 100, 5, 123, 456, 789, 10, 5]) colors = ['b','g'] # 生成对应的日期数据(假设是连续10天,从2019-01-01开始) start_date = datetime.strptime('2019-01-01', '%Y-%m-%d') dates = [start_date + timedelta(days=i) for i in range(len(y1))] # 创建画布和轴对象 fig, ax1 = plt.subplots(figsize=(10, 6)) # 设置柱状图宽度,避免两组数据重叠 bar_width = 0.35 x = np.arange(len(dates)) # 绘制两组柱状图 ax1.bar(x - bar_width/2, y1, width=bar_width, color=colors[0], label='Data 1') ax1.bar(x + bar_width/2, y2, width=bar_width, color=colors[1], label='Data 2') # 设置X轴为日期,优化标签显示 ax1.set_xticks(x) ax1.set_xticklabels([d.strftime('%Y-%m-%d') for d in dates], rotation=45, ha='right') # 添加图例、标题和轴标签 ax1.legend() ax1.set_title('Two Groups of Data by Date') ax1.set_xlabel('Date') ax1.set_ylabel('Value') # 调整布局,避免标签被截断 plt.tight_layout() plt.show()
关键修正点说明:
- 替换
hist()为bar():因为你需要的是按日期展示每个数据值,而非统计数据分布 - 关联日期与X轴:通过
set_xticks和set_xticklabels,把日期绑定到对应的柱子位置上 - 优化柱状图布局:设置合适的宽度让两组柱子并排展示,避免重叠
- 调整日期标签:旋转45度并设置右对齐,防止长日期标签互相遮挡
这样修改后,你就能看到每个日期对应的两组数据条,同时X轴的日期也能正常显示啦!
内容的提问来源于stack exchange,提问作者Jiancong
相关产品推荐
相关产品推荐

