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

如何在Matplotlib时间线图表中显示全部整数型Y轴标签并设置标准间隔?

问题描述

我使用以下代码绘制了一张时间线图表,但不知道如何显示全部整数类型的Y轴标签并设置标准间隔,请问有解决方法吗?

时间线图表

from matplotlib.patches import Patch
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams.update(matplotlib.rcParamsDefault)

fig, ax = plt.subplots(1, figsize=(20,7))
ax.barh(df.year, df.days_start_to_end, left=df.startNum, color=df.color)

xticks = np.arange(0, df.endNum.max()+1, 3)
xticks_labels = pd.date_range(proj_start, end=df.end.max()).strftime("%m/%d ")
xticks_minor = np.arange(0, df.endNum.max()+1, 1)
#ax.set_yticks(np.arange(len(df.year)))
ax.set_xticks(xticks)
#ax.set_xticks(xticks_minor, minor=True)
ax.set_xticklabels(xticks_labels[::3])

c_dict = { 'Perfect': '#4db249', 'Good':'#539de3',
          'Normal':'#ffbd63', 'Severe': '#ff7361', 'Drastic':'#ff2626'}
legendEl = [Patch(facecolor = c_dict[i], label = i) for i in c_dict]
plt.legend(handles = legendEl)

plt.show()
解决方案

要让Y轴显示全部整数标签并设置标准间隔,只需调整Y轴的刻度配置即可,具体步骤如下:

  • 恢复并修改Y轴刻度代码
    原代码中注释掉了Y轴刻度设置的行,取消注释并替换为以下代码,直接基于你的年份数据设置刻度:

    # 设置Y轴刻度为数据中的所有年份(整数)
    ax.set_yticks(df.year)
    # 确保标签以整数格式显示
    ax.set_yticklabels(df.year.astype(int))
    

    如果df.year本身已经是整数类型,astype(int)可以省略。

  • 完整修改后的代码
    整合后的完整代码如下:

    from matplotlib.patches import Patch
    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    matplotlib.rcParams.update(matplotlib.rcParamsDefault)
    
    fig, ax = plt.subplots(1, figsize=(20,7))
    ax.barh(df.year, df.days_start_to_end, left=df.startNum, color=df.color)
    
    xticks = np.arange(0, df.endNum.max()+1, 3)
    xticks_labels = pd.date_range(proj_start, end=df.end.max()).strftime("%m/%d ")
    xticks_minor = np.arange(0, df.endNum.max()+1, 1)
    
    # 配置Y轴显示全部整数标签
    ax.set_yticks(df.year)
    ax.set_yticklabels(df.year.astype(int))
    
    ax.set_xticks(xticks)
    #ax.set_xticks(xticks_minor, minor=True)
    ax.set_xticklabels(xticks_labels[::3])
    
    c_dict = { 'Perfect': '#4db249', 'Good':'#539de3',
               'Normal':'#ffbd63', 'Severe': '#ff7361', 'Drastic':'#ff2626'}
    legendEl = [Patch(facecolor = c_dict[i], label = i) for i in c_dict]
    plt.legend(handles = legendEl)
    
    plt.show()
    
  • 关键说明

    • ax.set_yticks(df.year):直接将Y轴刻度的位置指定为数据中的每个年份值,确保所有年份都能显示对应的刻度。
    • ax.set_yticklabels(df.year.astype(int)):强制标签以整数格式呈现,避免出现小数或非预期格式的标签。

内容的提问来源于stack exchange,提问作者AmirHossein Ahrari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:45:34