4

考虑以下代码

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间隔之外是不可见的:

在此处输入图像描述

问题似乎是线

time=-1.0*time

如果我省略这一行,一切都会完美运行..不知道为什么会这样。我经常需要这样的转换,因为我处理有时分别在公元前和公元年给出的古气候数据。

我看到的这种行为的问题是,原则上有人可以获取超出我想要显示的范围的数据。

有人知道如何解决这个问题(绘图前的数组切片除外)?

我使用 matplotlib 1.1.1rc2

4

1 回答 1

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_outside用于您的x-axis 值(注意:掩码命令中XMIN和的顺序XMAX并不重要)。这样,如果您以后想使用数组的其他部分,就
不必更改数组。 当我检查inkscape时,没有突出显示绘图之外的数据。time

于 2013-09-26T13:31:08.553 回答