Python matplotlib子地块日期时间x刻度剖分

Python matplotlib子地块日期时间x刻度剖分,python,datetime,matplotlib,subplot,Python,Datetime,Matplotlib,Subplot,定制x轴日期的解决方案可随时在上获得。我想进一步定制它。解决办法是 import datetime import matplotlib.pyplot as plt import matplotlib.dates as mdates import numpy as np base = datetime.datetime(2005, 2, 1) dates = np.array([base + datetime.timedelta(hours=(2 * i))

定制x轴日期的解决方案可随时在上获得。我想进一步定制它。解决办法是

import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

base = datetime.datetime(2005, 2, 1)
dates = np.array([base + datetime.timedelta(hours=(2 * i))
                  for i in range(732)])
N = len(dates)
np.random.seed(19680801)
y = np.cumsum(np.random.randn(N))
fig, axs = plt.subplots(3, 1, constrained_layout=True, figsize=(6, 6))

for nn, ax in enumerate(axs):
    locator = mdates.AutoDateLocator()
    formatter = mdates.ConciseDateFormatter(locator)
    formatter.formats = ['%y',  # ticks are mostly years
                         '%b',       # ticks are mostly months
                         '%d',       # ticks are mostly days
                         '%H:%M',    # hrs
                         '%H:%M',    # min
                         '%S.%f', ]  # secs
    # these are mostly just the level above...
    formatter.zero_formats = [''] + formatter.formats[:-1]
    # ...except for ticks that are mostly hours, then it is nice to have
    # month-day:
    formatter.zero_formats[3] = '%d-%b'

    formatter.offset_formats = ['',
                                '%Y',
                                '%b %Y',
                                '%d %b %Y',
                                '%d %b %Y',
                                '%d %b %Y %H:%M', ]
    ax.xaxis.set_major_locator(locator)
    ax.xaxis.set_major_formatter(formatter)

    ax.plot(dates, y)
    ax.set_xlim(lims[nn])
axs[0].set_title('Concise Date Formatter')

plt.show()
目前产出:


上面的代码将数据的年份添加到x轴的末尾。我还想在a轴的开始处添加数据的年份。在第一个子地块x轴中,2015显示在x轴的末尾。如何使其也显示在x轴的起始位置?

简单的方法是使用
文本添加文本,但它不是自动的,需要一些调整。或者你可以得到axe的tightbbox,并根据bbox添加文本。这里我提出了最简单的方法:添加相对于轴的文本

import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

dates = np.array([base + datetime.timedelta(hours=(2 * i))
                  for i in range(732)])
N = len(dates)
np.random.seed(19680801)
y = np.cumsum(np.random.randn(N))

lims = [(np.datetime64('2005-02'), np.datetime64('2005-04')),
        (np.datetime64('2005-02-03'), np.datetime64('2005-02-15')),
        (np.datetime64('2005-02-03 11:00'), np.datetime64('2005-02-04 13:20'))]

fig, axs = plt.subplots(3, 1, constrained_layout=True, figsize=(6, 6))

for nn, ax in enumerate(axs):
    locator = mdates.AutoDateLocator()
    formatter = mdates.ConciseDateFormatter(locator)
    formatter.formats = ['%y',  # ticks are mostly years
                         '%b',       # ticks are mostly months
                         '%d',       # ticks are mostly days
                         '%H:%M',    # hrs
                         '%H:%M',    # min
                         '%S.%f', ]  # secs
    # these are mostly just the level above...
    formatter.zero_formats = [''] + formatter.formats[:-1]
    # ...except for ticks that are mostly hours, then it is nice to have
    # month-day:
    formatter.zero_formats[3] = '%d-%b'

    formatter.offset_formats = ['',
                                '%Y',
                                '%b %Y',
                                '%d %b %Y',
                                '%d %b %Y',
                                '%d %b %Y %H:%M', ]
    ax.xaxis.set_major_locator(locator)
    ax.xaxis.set_major_formatter(formatter)

    ax.plot(dates, y)
    ax.set_xlim(lims[nn])
axs[0].set_title('Concise Date Formatter')
axs[0].text(0, -0.28, 'Feb 2005', transform=axs[0].transAxes)
axs[1].text(0, -0.28, 'Feb 2005', transform=axs[1].transAxes)
axs[2].text(0, -0.28, '04 Feb 2005', transform=axs[2].transAxes)

你不能轻易做到这一点;额外的日期信息在轴的“偏移量”中,我相信是在轴的固定位置。但是,您可以获取第一个勾号的文本,并在文本中添加回车符,然后添加年份。@JodyKlymak不熟悉子地块,我还没有完全理解。但你似乎知道那里发生了什么。你能告诉我该怎么做吗?@JodyKlymak我很感谢你对我的新问题的意见