Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib数据可在xlim范围之外访问_Python_Matplotlib - Fatal编程技术网

Python matplotlib数据可在xlim范围之外访问

Python matplotlib数据可在xlim范围之外访问,python,matplotlib,Python,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') 当我在inksc

考虑以下代码

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') 
键更改用于
x
轴值(注意:掩码命令中
XMIN
XMAX
的顺序不重要)。
这样,如果以后想使用数组的其他部分,就不必更改数组
时间


当我使用inkscape检查时,没有突出显示绘图之外的数据

在打印之前对阵列进行切片是一种方法。你为什么不想这样?因为它需要额外的代码,因此我更愿意使用xlimAs作为旁白,任何光栅化格式(比如
.png
)都不应该显示这种行为。光栅化不是一种真正的选项,我喜欢矢量图形的优点这是一个已知的错误。我知道这个问题可以通过改变数组来解决,不管是切片还是掩蔽。我正在使用pyplot寻找解决方案。无论如何,谢谢你的回答!