2013-09-26 43 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寻找解决方案。无论如何感谢您的回答! –