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

如何在Matplotlib Python中为X轴设置波斯历(Jalali)日期标签?

解决Matplotlib日期X轴刻度显示混乱问题

问题描述

拥有日期列表向量x和物品价格向量y,使用Matplotlib绘图时X轴刻度显示效果差(标签重叠、排版拥挤),原代码如下:

plt.rcParams["figure.figsize"] = (20,10)
fig, ax = plt.subplots()
reshaped_text = arabic_reshaper.reshape(u'پارازایلن')
artext = get_display(reshaped_text)
ax.plot(x,y, color='mediumvioletred',linewidth = 8, label=artext)

fig.figimage(im, 43, 425, zorder=100, alpha=1)
#ax.locator_params(axis='x',nbins=5)
#plt.xticks(rotation = 70)
_=ax.legend(loc='lower center')

解决方案

针对日期型X轴的显示问题,可通过以下步骤优化:

  • 确保日期向量为datetime类型:如果x是字符串格式,先转换为datetime对象,否则Matplotlib无法识别为日期刻度

    import pandas as pd
    x = pd.to_datetime(x)
    
  • 旋转刻度标签避免重叠:取消原代码中plt.xticks(rotation = 70)的注释,或用tick_params灵活设置

    ax.tick_params(axis='x', rotation=45, labelsize=10)  # 旋转45度,同时调整字号
    
  • 智能控制刻度数量:用locator_params限制刻度数,或用日期专用定位器实现自适应

    # 方法1:直接限制刻度数量
    ax.locator_params(axis='x', nbins=6)
    
    # 方法2:更智能的日期定位器
    from matplotlib.dates import AutoDateLocator
    ax.xaxis.set_major_locator(AutoDateLocator())
    
  • 自定义日期显示格式:根据需求设置日期标签样式,比如只显示年月

    from matplotlib.dates import DateFormatter
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
    
  • 调整布局防止标签截断:最后添加布局优化,避免底部标签被遮挡

    plt.tight_layout()
    

修改后的完整代码

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.dates import AutoDateLocator, DateFormatter
import arabic_reshaper
from bidi.algorithm import get_display

plt.rcParams["figure.figsize"] = (20,10)
fig, ax = plt.subplots()

# 转换日期为datetime类型
x = pd.to_datetime(x)

reshaped_text = arabic_reshaper.reshape(u'پارازایلن')
artext = get_display(reshaped_text)
ax.plot(x,y, color='mediumvioletred',linewidth = 8, label=artext)

fig.figimage(im, 43, 425, zorder=100, alpha=1)

# 配置X轴刻度
ax.tick_params(axis='x', rotation=45, labelsize=10)
ax.xaxis.set_major_locator(AutoDateLocator())
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
ax.locator_params(axis='x', nbins=6)

_=ax.legend(loc='lower center')
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:34