2011-04-27 42 views
1

我试图制作的图表是一个以日期为垂直维度的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轴。有没有一种方法可以在不编写自定义标记定位器的情况下运行?

回答

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

+0

非常感谢您! – elpres 2011-04-28 07:15:15