2010-11-09 142 views
48

我想用pylot繪製一個標準的二維線圖,但強制軸的值在x上爲0到600,在y上爲10k和20k。讓我來舉一個例子...Matplotlib/pyplot:如何執行軸範圍?

import pylab as p 

p.title(save_file) 
p.axis([0.0,600.0,1000000.0,2000000.0]) 

#define keys and items elsewhere.. 
p.plot(keys,items) 
p.savefig(save_file, dpi=100) 

但是,軸仍然適應數據的大小。我正在解釋p.axis的作用是設置最大和最小值,而不是強制它們成爲最大值或最小值。當我嘗試使用p.xlim()等時會發生同樣的情況。

有什麼想法?

謝謝。

+1

在添加到下面的答案,直接鏈接到「軸」 DOC:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis – Calvin1602 2013-01-23 13:25:30

回答

23

要回答我的問題,關鍵是要關閉自動縮放關閉...

p.axis([0.0,600.0, 10000.0,20000.0]) 
ax = p.gca() 
ax.set_autoscale_on(False) 
35

調用p.plot後設置的限制就是爲什麼它被重新調整。你在正確的轉動自動縮放關閉將得到正確的答案,但如此將調用xlim()ylim()您的plot命令。

我用這頗多反轉x軸,我在天文學工作,我們使用了大小系統,這是向後(即亮的恆星具有更小的幅度),所以我通常交換的限制與

lims = xlim() 
xlim([lims[1], lims[0]]) 
+2

可以得到倒軸用'ax1.invert_xaxis ()'。 – Adobe 2013-10-04 07:49:07

7

嘗試在所有繪製命令之後再打電話給axis

+0

這是自動縮放的工作原理。如果你改變了這個數字,數字就會自動調整。 「axis」命令不會調用autoscale。除了調用autoscale的「plot」之外的其他命令是logscale和tick位置相關的。自動縮放確保顯示操縱的刻度位置。 – Juha 2016-05-15 22:36:15

10

我嘗試了所有上述答案,然後總結了如何繪製固定軸圖像的流水線。它適用於show函數和savefig函數。

  1. 你之前的情節:

    fig = pylab.figure() 
    ax = fig.gca() 
    ax.set_autoscale_on(False) 
    

這是請求ax這是subplot(1,1,1)

  • 在情節:

    ax.plot('You plot argument') # Put inside your argument, like ax.plot(x,y,label='test') 
    ax.axis('The list of range') # Put in side your range [xmin,xmax,ymin,ymax], like ax.axis([-5,5,-5,200]) 
    
  • 情節後:

    1. 要顯示圖像:

      fig.show() 
      
    2. 爲了節省這個數字:

      fig.savefig('the name of your figure') 
      
  • 我發現,把axis在代碼前,即使我已設置autoscale_onFalse將無法​​正常工作。

    我使用此代碼來創建一系列動畫。下面是將多個固定軸圖像組合成動畫的示例。 img