子批次中的变形器

2024-06-02 04:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

在多个子批次中使用mdates.ConciseDateFormatter会在轴上产生错误偏移:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

dti = pd.to_datetime(["2016-08-31", "2016-09-30"])
ts0 = pd.DataFrame({"x": [0, 1]}, index=dti)
ts1 = pd.DataFrame({"x": [0, 1]}, index=dti + pd.Timedelta(365, "D"))
fig, axs = plt.subplots(2, 1, sharex=False)
ts0["x"].plot(ax=axs[0], marker="o")
ts1["x"].plot(ax=axs[1], marker="o")
dlocator = mdates.AutoDateLocator(minticks=6, maxticks=9)
axs[0].xaxis.set_major_locator(dlocator)
axs[0].xaxis.set_major_formatter(mdates.ConciseDateFormatter(dlocator))
axs[1].xaxis.set_major_locator(dlocator)
axs[1].xaxis.set_major_formatter(mdates.ConciseDateFormatter(dlocator))

mdates_bug

该图显示了在将主定位器和格式化程序指定给底部打印时,顶部打印的x轴刻度标签被弄乱。是否有解决此错误或问题的方法


1条回答
网友
1楼 · 发布于 2024-06-02 04:28:35
  • 需要为每个axes实例化AutoDateLocator
  • ^{}
  • ^{}
  • python 3.8.11pandas 1.3.3matplotlib 3.4.3

绘图设置代码

fig, axs = plt.subplots(2, 1, sharex=False, figsize=(7, 7))
# axs = axs.flatten()  # required to easily index subplots, if subplots >= 2x2
ts0["x"].plot(ax=axs[0], marker="o")
ts1["x"].plot(ax=axs[1], marker="o")

选择1

# instantiate AutoDateLocator
locator = mdates.AutoDateLocator(minticks=6, maxticks=9)
axs[0].xaxis.set_major_locator(locator)
axs[0].xaxis.set_major_formatter(mdates.ConciseDateFormatter(locator))

# instantiate AutoDateLocator
locator = mdates.AutoDateLocator(minticks=6, maxticks=9)
axs[1].xaxis.set_major_locator(locator)
axs[1].xaxis.set_major_formatter(mdates.ConciseDateFormatter(locator))

fig.tight_layout()

选择2

for ax in axs:
    # instantiate AutoDateLocator
    locator = mdates.AutoDateLocator(minticks=6, maxticks=9)
    formatter = mdates.ConciseDateFormatter(locator)
    ax.xaxis.set_major_locator(locator)
    ax.xaxis.set_major_formatter(formatter)

fig.tight_layout()

绘图结果

enter image description here

相关问题 更多 >