You need to enable JavaScript to run this app. matplotlib绘制含日期的柱状图时,设置x轴刻度后无日期值显示
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib绘制含日期的柱状图时,设置x轴刻度后无日期值显示

核心异常根本原因

你遇到的x轴无刻度问题由两个代码逻辑缺陷共同导致:

  • 代码执行顺序错位:在调用plt.bar()绘制图形之前,就提前给x轴配置了日期格式化规则和刻度定位器。而matplotlib在执行绘图操作时,会根据传入的x轴数据自动重置坐标轴的范围、刻度规则,直接覆盖掉之前手动配置的定位逻辑。
  • 类型适配缺失:传入plt.bar()的x轴日期字段如果没有转换为matplotlib日期坐标系可识别的数值类型,mdates.DayLocator在计算刻度位置时会和实际坐标轴范围不匹配,最终不会生成任何可见刻度。
分步修复方案
  • 调整代码执行顺序:将x轴的刻度定位、格式配置代码移动到plt.bar()调用之后执行,确保配置规则不会被绘图动作重置。
  • 显式适配日期数据类型:提前将pandas读取的Date列通过pd.to_datetime()转换为标准时间格式,传入绘图函数时确保x轴数据符合matplotlib日期模块的识别要求。
  • 补充日期轴适配参数:绘制柱状图时根据日期坐标的数值单位设置合适的柱子宽度(日期坐标下1单位长度对应1个自然日),同时可调用plt.gcf().autofmt_xdate()自动完成日期标签的旋转、对齐,避免标签被布局逻辑隐藏。
修复后的参考代码
def plot_var(country):
    """
    Plots a bar chart of the given variable over the date range
    """
    # 提前强制转换日期字段为标准时间格式
    confirmed_data['Date'] = pd.to_datetime(confirmed_data['Date'])
    y = confirmed_data[confirmed_data['Country_Region']==country]["TargetValue"]
    x = confirmed_data[confirmed_data['Country_Region']==country]['Date']
    
    plt.figure(figsize=(12,4))
    # 调整柱子宽度为1,匹配日期坐标的单位尺度
    plt.bar(x=x, height=y, color='blue', width=1)
    
    # 将坐标轴配置代码移动到绘图操作之后
    ax = plt.gca()
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
    ax.xaxis.set_major_locator(mdates.DayLocator(interval=30))
    
    plt.title("Plot of \"ConfirmedCases\"", fontsize=18)
    plt.grid(True)
    plt.xticks(fontsize=14, rotation=45)
    plt.yticks(fontsize=14)
    # 自动适配日期轴的标签显示逻辑
    plt.gcf().autofmt_xdate()
    plt.show()

补充说明:修复后如果依然出现刻度缺失,可额外调用ax.set_xlim()显式设置x轴的左右边界,避免matplotlib自动缩放坐标轴范围时将刻度位置裁剪到可视区域外。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 09:36:05