【问题标题】:Matplotlib: plotting on old plotMatplotlib:在旧图上绘图
【发布时间】:2018-02-08 00:00:11
【问题描述】:

在查看了这个问题 (How do I tell Matplotlib to create a second (new) plot, then later plot on the old one?) 之后,我以为我已经弄清楚了,但我认为我的 for 循环遇到了问题。这是我正在做的事情的精简版。

import matplotlib.pyplot as plt
import numpy as np

for m in range(2):
   x=np.arange(5)
   y=np.exp(m*x)
   plt.figure(1)
   plt.plot(x, y)
   plt.show()
   ...
   z=np.sin(x+(m*math.pi))
   plt.figure(2)
   plt.plot(x,z)
   ...
plt.figure(2)
plt.show()

我希望这会显示三个图:第一次是 e^(0) 与 x 的图,第二次是 e^x 与 x 的图,然后是一个带有 sin(x ) 和 sin(x+pi) 与 x。

但是我得到了前两个图和一个只有 sin(x) 的图和一个只有 sin(x+pi) 的图。

如何获得我想要的所有数据到图 2?当我返回循环的开头时,设置的数字重置似乎是某种问题。

【问题讨论】:

  • 不要在每次调用plt.plot() 之后再调用plt.show(),而应在您对plt.plot() 进行所有调用之后再调用一次。
  • 您是否介意在您的问题中提供带有真实代码的minimal reproducible example,以便人们能够理解和重现您在做什么?还要清楚地说明所需的输出。 “图 1 的情节”不是很容易理解。而是说您希望哪些数据出现在哪个图上。
  • @cmaher 为了澄清我对我所写内容的理解(这可能是不正确的):第一次通过循环我绘制并显示图 1,然后绘制,但不显示图 2。下一个通过循环,我再次绘制并显示带有新数据的图 1,并将另一组数据绘制到图 2,但不绘制。然后在离开循环后,我尝试显示图 2。对我来说,这似乎是在我绘制完所有数据之后才调用 plt.show()。
  • @ImportanceOfBeingErnest 我将相应地编辑代码和问题。
  • @ImportanceOfBeingErnest 这足够充实吗?我相信这是可以验证的,并且似乎涵盖了我的问题的症结。

标签: python matplotlib plot figure


【解决方案1】:

这个最小的改变可能会做你想要的(虽然它不是最好的代码)。

plt.figure(1) 替换为plt.figure()。从循环内部删除任何plt.show()

循环将结束,然后将显示所有 3 个数字。 e^x 曲线将在图 #1 和 #3 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2020-02-28
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多