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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:05