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

如何将Joyplot的X轴日期序列号格式化为mm.yyyy格式?

解决Joyplot X轴日期序列号转'mm.yyyy'格式的问题

核心思路

Joyplot要求X轴为数值型日期时,可借助Matplotlib的日期格式化工具,将数值型日期映射回datetime对象,再自定义刻度标签格式。

具体实现步骤(附示例代码)

假设你的数据已包含datetime类型的日期列,先将其转换为Matplotlib兼容的数值型日期,再绘图并格式化X轴:

  1. 导入所需库
import pandas as pd
import numpy as np
from joypy import joyplot
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
  1. 准备示例数据(模拟你的数据结构)
# 生成月度日期序列
dates = pd.date_range(start='2022-01-01', end='2023-12-31', freq='M')
# 构造带分类、日期、数值的数据集
df = pd.DataFrame({
    'date': dates.repeat(10),
    'value': np.random.randn(len(dates)*10),
    'category': np.tile([f'Group_{i}' for i in range(4)], len(dates)*2)
})
# 将datetime日期转为Matplotlib兼容的数值型(替代你原来的日期序列号转换)
df['date_num'] = mdates.date2num(df['date'])
  1. 绘制Joyplot并格式化X轴
# 绘制脊线图,获取返回的画布和轴对象
fig, axes = joyplot(df, by='category', x='date_num', y='value', figsize=(10, 6))

# 遍历所有子轴,统一设置X轴格式
for ax in axes:
    # 设置日期格式化器,指定'mm.yyyy'格式
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%m.%Y'))
    # 自动调整刻度,避免标签重叠
    plt.setp(ax.get_xticklabels(), rotation=45, ha='right')

# 调整布局,防止标签被截断
plt.tight_layout()
plt.show()

关键注意事项

  • 优先使用mdates.date2num()转换日期,而非自定义序列号,这样Matplotlib的日期工具能直接识别。
  • 如果你的日期序列号是datetime.toordinal()生成的,转换回datetime时用pd.to_datetime(tick, unit='D'),再手动生成标签:
    tick_dates = [pd.to_datetime(t, unit='D') for t in ax.get_xticks()]
    ax.set_xticklabels([dt.strftime('%m.%Y') for dt in tick_dates])
    
  • 若仅底部共享X轴需要显示,只需单独处理axes[-1](Joyplot返回的最后一个轴通常是底部的共享轴)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:24:18