显示倒置的垂直日期轴

时间:2011-04-27 13:32:31

标签: python matplotlib axis

我想要制作的图表是一个2D数组,其日期为垂直维度。按照惯例,日期应该从上到下增加。通过以下代码显示相反的日期:

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 个答案:

答案 0 :(得分:2)

反转日期时间轴会破坏ticklocator和格式设置,这太糟糕了。我能想到的最简单的事情是手动重新设置它们。这是format table的链接。这是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