如何在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
相关产品推荐
相关产品推荐

