2011-04-27 55 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