在matplotlib中添加数据层

Add layers of data in matplotlib

这可能是一个非常幼稚的问题,但我找不到如何执行此操作的明确说明。我想在 matplotlib 中做的是:

  1. 做一些计算
  2. 创建图形或轴对象?
  3. 向对象添加数据,绘制它
  4. 再做一些计算
  5. 将新数据添加到对象作为新层(不是扩展现有数据,而是有一个新的line/scatter)

我想做类似的事情:

x = rand(10)
y = rand(10)
p = plot(x,y, '.', label="x:y")

# other code, possibly a new cell in the notebook

a = rand(10)
b = rand(10)

p.plot(a,b, '--', label="a:b") # error. what do I do to add a layer here?

最终图应包含 (x,y) 和 (a,b) 数据。

我对一堆子图不感兴趣(每个示例似乎都有),我想在 pylab 图中(在 IPython 笔记本中)执行上述操作。

谢谢!

你的问题是 plot returns 不是绘制事物的实际对象,但你正试图将其用作。所以你需要将 p 定义为你想要在其中绘制东西的对象。

import pylab as py
from numpy.random import rand

x = rand(10)
y = rand(10)
p = py.gca()
p.plot(x,y, '.', label="x:y")

# other code, possibly a new cell in the notebook

a = rand(10)
b = rand(10)

p.plot(a,b, '--', label="a:b")

事实上,在您的原始代码中,如果您只是删除了第二个 plot 命令中的 p.,您就会得到我认为您想要的结果。

我解决这个问题的一种方法是按如下方式创建图形和轴:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1,2,3],[1,2,3])

在这里根据需要设置图形参数,最后调用 show 但 block=False

plt.show(block=False)

然后,您可以使用 Matplotlibs plt.gca() 函数将其他函数添加到同一轴,该函数 returns 用户当前或最后单击的轴,如下所示(但不要创建新图形或轴)并使用 Matplotlibs draw() 函数:

plt.gca().plot([4,5,6],[4,5,6])
plt.draw()