2013-09-26 79 views
2

考慮下面的代碼matplotlib數據訪問外

import matplotlib.pyplot   as plt 
import numpy      as np    

time=np.arange(-100,100,01) 
val =np.sin(time/10.) 

time=-1.0*time 

plt.figure() 
plt.plot(time,val) 
plt.xlim([70,-70]) 
plt.savefig('test.pdf') 

當我打開Inkscape中的PDF,我可以選擇(與F2)的整個數據,這是指定的XLIM區間只是看不見外面:

enter image description here

這個問題似乎是行

time=-1.0*time 

如果我省略這條線,一切都完美無缺。不知道爲什麼。我經常需要這種轉變,因爲我處理的是古氣候數據,這些數據有時在B.C.和A.D.年分別。

我看到這個行爲的問題是,有人可能原則上得到的數據超出我想要顯示的範圍。

有人有線索如何解決這個問題(繪圖之前的數組片除外)?

我使用matplotlib 1.1.1rc2

+1

在繪圖之前切片數組是一種可行的方法。你爲什麼不要那個? –

+0

,因爲它需要額外的代碼,所以我寧願使用xlim –

+0

另外,任何柵格化格式(比如'.png')都不應該顯示這種行爲。 – Hooked

回答

1

根據您選擇的限制繪圖時,您可以掩蓋你的陣列。是的,這也需要對代碼進行更改,但可能不像您可能擔心的那樣廣泛。這裏是你的榜樣的更新版本:

import matplotlib.pyplot   as plt 
import numpy      as np    

time=np.arange(-100,100,01) 
val =np.sin(time/10.) 

time=-1.0*time 

plt.figure() 

# store the x-limites in variables for easy multi-use 
XMIN = -70.0 
XMAX = 70.0 

plt.plot(np.ma.masked_outside(time,XMIN,XMAX),val) 
plt.xlim([XMIN,XMAX]) 

plt.savefig('test.pdf') 

關鍵的變化是用np.ma.masked_outsidex軸值(:中XMINXMAX在掩模命令的順序並不重要)。
這樣,如果您稍後想要使用其他部分,則不必更改數組time
當我使用inkscape進行檢查時,沒有突出顯示任何數據以外的數據。

+0

我意識到可以通過修改陣列來解決問題,無論是切片還是遮罩。我正在使用pyplot尋找解決方案。無論如何感謝您的回答! –