2012-09-19 159 views
2

好吧我完全停留在Python問題上。我認爲詳細描述這個問題令人困惑,所以我會總結這個問題,然後展示我的代碼。在python中繪製imshow和線條圖

我已經創建了一個imshow情節,在這個情節的頂部,我想繪製一個規則的線條情節。 Y軸是不同的,這很好,但是X軸對於兩者都應該是相同的。

它幾乎工作,除了縮放:

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.set_xlabel('MJD',fontsize=14) 
ax1.set_ylabel('Bin Number',fontsize=14) 
mjdaxis=np.linspace(0,bad_removed_mjd.shape[0]-1,20).astype('int') 
ax1.set_xticks(mjdaxis,[int(np.floor(bad_removed_mjd[i])) for i in mjdaxis]) 
ax1.imshow(residuals, aspect="auto") 

ax2 = ax1.twinx() 
ax2.set_ylabel('Pdot (s-2)',fontsize=14) 
ax2.plot(pdot[8:,0],pdot[8:,1]) 

plt.show() 

現在發生的事情是,imshow情節被值之間的0-60個左右在x軸上擠壓。這是因爲他們現在得到他們的索引號0,1,2 ....我需要他們的x軸值對應於列表中的值'bad_mjd_removed'55304,55365,55401 ....這工作正常當我有自己的imshow情節。

這裏有自身的imshow情節的圖片,然後當我嘗試過它添加了線圖:

plot with imshow only plot with imshow and line plot

在第二個情節,約爲0細線在x軸上是整個圖片1擠在0和60之間。

我會非常感謝這個問題的任何幫助。謝謝。

回答

3

您可以使用extent kwarg將imshow情節放在正確的位置。作爲額外的好處,如果你也這樣做了,你應該可以讓matplotlib自動處理座標軸標記。

import matplotlib.pyplot as plt 
import numpy as np 
x = np.random.rand(2,3) 
plt.imshow(x, interpolation='nearest', extent=[0,3,0,2]) 

enter image description here

plt.imshow(x, interpolation='nearest', extent=[100,103,100,102]) 

enter image description here

0

您的一種可能性是使用imshow的extend = keyword,例如,

plt.imshow(extend=(mjdaxis.min(),0,mjdaxis.max(),1000) 

或類似的東西。 但是你也應該記住,如果mjdaxis tickmarks之間的差距不是恆定的,你的線圖不會直接對應圖像,因爲imshow圖不會像線圖

+0

嗯..沒有刻度線不是很穩定很遺憾。 – user1551817

+0

如果間隔不一樣,並且您仍然希望圖像的x軸和線條圖之間存在直接對應關係,我認爲您必須將您的圖像插入mjdaxis上的線性標尺並保持不變。 –

+0

無論如何,我正在嘗試解決上述問題。只是爲了檢查,它應該是「範圍」而不是「擴展」?謝謝。 – user1551817