显示反向的垂直日期轴

1 投票
1 回答
953 浏览
提问于 2025-04-16 16:31

我想制作的图表是一个二维数组,日期作为纵向的维度。按照惯例,日期应该是从上到下逐渐增加的。如果把日期反过来显示,这段代码就能正常工作:

import numpy as np
import matplotlib as mpl
import matplotlib.colorbar as cb
import matplotlib.pyplot as plt
from datetime import datetime

y = np.reshape(np.random.rand(100), (10, 10))
f1 = plt.figure()
ax1 = f1.add_axes([0.15, 0.15, 0.76, 0.80])
mindate = mpl.dates.date2num(datetime(2010, 1, 10))
maxdate = mpl.dates.date2num(datetime(2010, 1, 20))
im1 = ax1.imshow(y, cmap='binary', aspect='auto', origin='upper',
                 interpolation='nearest', extent=(0, 1, mindate, maxdate))
ax1.yaxis_date()
plt.show()

对于其他数据类型,反转坐标轴的方向很简单,只需要调整区间的边界就可以了,但对于日期来说,这样做会导致Y轴变成空的。有没有办法在不写自定义刻度定位器的情况下实现这个功能呢?

1 个回答

1

很可惜,当你把日期时间的坐标轴反转时,会把之前设置的刻度和格式都搞没了。最简单的办法就是手动重新设置这些东西。这里有一个关于格式的表格链接:格式表。还有一个关于的链接:DateFormatter。你也可以试试AutoDateFormatter

下面是代码:

import numpy as np
import matplotlib as mpl
import matplotlib.colorbar as cb
import matplotlib.pyplot as plt
from datetime import datetime
from matplotlib import dates

y = np.reshape(np.random.rand(100), (10, 10))
f1 = plt.figure()
ax1 = f1.add_axes([0.15, 0.15, 0.76, 0.80])
mindate = mpl.dates.date2num(datetime(2010, 1, 10))
maxdate = mpl.dates.date2num(datetime(2010, 1, 20))
im1 = ax1.imshow(
    y, cmap='binary', aspect='auto',
    origin='upper', interpolation='nearest',
    extent=(0, 1, mindate, maxdate))

ax1.yaxis_date()

ax1.invert_yaxis()
hfmt = dates.DateFormatter('%b %d %Y')
ax1.yaxis.set_major_locator(dates.DayLocator(interval=1))
ax1.yaxis.set_major_formatter(hfmt)

plt.show()

运行后会得到这个效果:enter image description here

撰写回答