在IPython/matplotlib中重新绘制绘图

在IPython/matplotlib中重新绘制绘图,python,matplotlib,ipython,Python,Matplotlib,Ipython,我使用IPython/Matplotlib,我想创建可以在同一打印窗口中打印各种图形的函数。然而,我在重画时遇到了麻烦。这是我的程序test\u plot\u simple.py: from __future__ import division import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y2 = (x**2)/(10**2) ye = (2**x)/(2**10) fig, ax = plt.sub

我使用IPython/Matplotlib,我想创建可以在同一打印窗口中打印各种图形的函数。然而,我在重画时遇到了麻烦。这是我的程序
test\u plot\u simple.py

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y2 = (x**2)/(10**2)
ye = (2**x)/(2**10)
fig, ax = plt.subplots()

def p_squared():
    ax.plot(x,y2, 'r')
    plt.show()

def p_exp():
    ax.plot(x,ye, 'r')
    plt.show()
我以
$python--matplotlib

在IPython命令行上,我可以

In [1]: run test_plot_simple.py
In [2]: p_squared()
In [3]: p_exp()

在第二行之后,显示平方图。但是第二次之后什么也没有发生。为什么
plt.show()
在这里不起作用?

看起来好像你调用了
子图,却没有真正利用它们,也就是说你试图在同一画布上过度绘制。有关更详细的解释,请参阅。也就是说,为了获得我认为您想要的功能,您只需要以下几点:

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y2 = (x**2)/(10**2)
ye = (2**x)/(2**10)

def p_squared():
    plt.plot(x,y2, 'r')
    plt.show()

def p_exp():
    plt.plot(x,ye, 'r')
    plt.show()

现在
p_squared()
p_exp()
调用都会生成绘图。希望这能有所帮助。

经过一些挖掘,我想我找到了正确的方法。似乎
show()
并不是真正用于此目的,而是
draw()
用于此目的。如果我想让它面向对象,我应该通过我的图形或轴来绘制。在我看来,这是最好的方法:

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y2 = (x**2)/(10**2)
ye = (2**x)/(2**10)
fig, ax = plt.subplots()
fig.show()

def p_squared():
    ax.plot(x,y2, 'r')
    fig.canvas.draw()

def p_exp():
    ax.plot(x,ye, 'r')
    fig.canvas.draw()
例如,使用
fig.canvas.draw()
代替
plt.show()
(或
fig.show()


我仍然需要一个
show()
-我选择在图形创建后立即执行该操作。

这在简单示例中很有帮助。然而,出于其他原因,我需要采用面向对象的方法,从一开始就可以跟踪轴。因此,我确实需要通过
ax.plot()
进行绘图。