【问题标题】:matplotlib data accessible outside of xlim range可在 xlim 范围之外访问的 matplotlib 数据
【发布时间】:2013-09-26 08:03:33
【问题描述】:

考虑下面的代码

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

【问题讨论】:

  • 在绘图之前对数组进行切片是可行的方法。你为什么不想要那个?
  • 因为它需要额外的代码,因此我更喜欢使用 xlim
  • 顺便说一句,任何光栅化格式(比如.png)都不应该显示这种行为。
  • 光栅化并不是一个真正的选择,我喜欢矢量图形的优点
  • 这是一个已知的错误github.com/matplotlib/matplotlib/issues/2423

标签: python matplotlib


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

【讨论】:

  • 我知道这个问题可以通过改变数组来解决,无论是切片还是掩码。我正在寻找使用 pyplot 的解决方案。无论如何感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
相关资源
最近更新 更多