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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:15