Python Matplotlib时间线图x轴季度Q标识替换为自定义kv标识咨询
你之前使用plt.xlabel没有效果是因为该方法用来设置x轴的总标题,无法修改x轴的刻度文本。你可以通过直接替换x轴刻度标签的方式快速实现需求,具体操作如下:
修改步骤
在现有代码的plt.yticks( weight = 'bold')这一行后面,添加如下代码即可:
# 替换x轴刻度中的Q标识为kv标识 x_ticks = ax.get_xticklabels() ax.set_xticklabels([label.get_text().replace('Q', 'kv') for label in x_ticks]) # 可选:如果需要弹出显示图片,添加下面一行 plt.show()
如果需要更灵活的适配后续数据变动,也可以使用自定义格式化器的方案,代码如下:
from matplotlib.dates import num2date def quarter_formatter(x, pos): date = num2date(x) # 计算当前日期对应的季度 q = (date.month - 1) // 3 + 1 # 仅在每年第一个刻度显示年份,其余刻度仅显示季度标识 if pos == 0 or num2date(ax.get_xticks()[pos-1]).year != date.year: return f"kv{q} {date.year}" return f"kv{q}" ax.xaxis.set_major_formatter(plt.FuncFormatter(quarter_formatter))
完整修改后代码示例
import random import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib.pyplot import figure import pandas plt.style.use('seaborn-whitegrid') matplotlib.rcParams['font.sans-serif'] = "Arial" matplotlib.rcParams['font.family'] = "Arial" categories = ['Car','Train','Boat', 'Plane', 'Walk' ] cat_dict = dict(zip(categories, range(1, len(categories)+1))) val_dict = dict(zip(range(1, len(categories)+1), categories)) dates = pandas.DatetimeIndex(freq='Q', start='2021-09-30', end='2023-12-31') values = [random.choice(categories) for _ in range(len(dates))] df = pandas.DataFrame(data=values, index=dates, columns=['category']) df['plotval'] = [float('NaN'),1,1,3,1,float('NaN'),5,2,1,float('NaN')] df['plotval'][0] = np.nan plt.rcParams["figure.figsize"] = 4,3.5 plt.figure(dpi=1000) fig, ax = plt.subplots() df['plotval'].plot(ax=ax, style='^',color='darkblue', label = "Renteheving", markersize=12) ax.margins(0.2) ax.spines['top'].set_visible(False) ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, pos: val_dict.get(x))) plt.yticks( weight = 'bold') # 新增替换x轴刻度代码 x_ticks = ax.get_xticklabels() ax.set_xticklabels([label.get_text().replace('Q', 'kv') for label in x_ticks]) plt.show()
内容的提问来源于stack exchange,提问作者Andreas Hild
相关产品推荐
相关产品推荐

