考虑以下代码

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

最佳答案

根据选择的限制进行打印时,可以遮罩阵列。是的,这也需要对代码进行修改,但可能没有您担心的那么广泛。下面是示例的更新版本:

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

关于python - 在xlim范围之外可访问的matplotlib数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19022601/

10-12 00:22
查看更多