2012-02-21 21 views
4

我有我使用繪製填充等高線圖下面的Python代碼:繪圖點增加了大量的空白

def plot_polar_contour(values, azimuths, zeniths): 
    theta = np.radians(azimuths) 
    zeniths = np.array(zeniths) 

    values = np.array(values) 
    values = values.reshape(len(azimuths), len(zeniths)) 

    r, theta = np.meshgrid(zeniths, np.radians(azimuths)) 
    fig, ax = subplots(subplot_kw=dict(projection='polar')) 
    ax.set_theta_zero_location("N") 
    ax.set_theta_direction(-1) 
    cax = ax.contourf(theta, r, values, 30) 
    autumn() 
    cb = fig.colorbar(cax) 
    cb.set_label("Pixel reflectance") 
    show() 

這讓我像一個情節:

enter image description here

然而,當我剛剛show()之前添加一行ax.plot(0, 30, 'p')我得到以下幾點:

enter image description here

似乎只是將一個點(這在原始軸範圍內)加上了半徑軸上的軸範圍。

是這個設計,還是這個錯誤?你會建議如何解決它?我是否需要手動調整軸範圍,還是有辦法停止額外的繪圖命令?

回答

5

如果沒有明確指定軸自動縮放模式,則plot將使用「鬆散」自動縮放並且contourf將使用「緊密」自動縮放。

同樣的事情發生在非極軸上。例如。

import matplotlib.pyplot as plt 
import numpy as np 

plt.imshow(np.random.random((10,10))) 
plt.plot([7], [7], 'ro') 
plt.show() 

您有多個選項。

  1. 顯式調用ax.axis('image')ax.axis('tight')在代碼中的一些點。
  2. scalex=Falsescaley=False作爲關鍵字參數傳遞給plot
  3. 手動設置軸限制。

最容易和最可讀的是明確呼籲ax.axis('tight'),i.m.o.

+3

將'ax.autoscale(False)'放在'ax.countourf'之後但在'ax.plot'之前是[另一個選項](http://stackoverflow.com/a/9120929/190597)。 – unutbu 2012-02-21 16:07:44

+0

謝謝。使用'scalex = False'和'scaley = False'解決了這個問題,但是我更喜歡使用'ax.axis('tight')',因爲它更清潔一點,但我無法讓它工作。我應該在哪裏打電話給'ax.axis('tight')'?我曾嘗試在調用'ax.plot'之前和之後調用'ax.contourf'之前和之後。有任何想法嗎? – robintw 2012-02-21 16:10:19

+0

@unutbu:謝謝,這工作得很好,比其他一些選項更明顯。 – robintw 2012-02-21 16:11:56