如何在matplotlib中分别显示数字?

假设我在matplotlib中有两个数字,每个数字有一个图:

import matplotlib.pyplot as plt f1 = plt.figure() plt.plot(range(0,10)) f2 = plt.figure() plt.plot(range(10,20)) 

然后我一举两得

 plt.show() 

有没有办法单独显示他们,即只显示f1

或者更好:我怎样才能像下面的'如意'的代码(这是行不通的)分开pipe理数字:

 f1 = plt.figure() f1.plot(range(0,10)) f1.show() 

当然。 使用add_subplot添加一个Axes 。 (编辑import 。)(编辑的show

 import matplotlib.pyplot as plt f1 = plt.figure() f2 = plt.figure() ax1 = f1.add_subplot(111) ax1.plot(range(0,10)) ax2 = f2.add_subplot(111) ax2.plot(range(10,20)) plt.show() 

或者,使用add_axes

 ax1 = f1.add_axes([0.1,0.1,0.8,0.8]) ax1.plot(range(0,10)) ax2 = f2.add_axes([0.1,0.1,0.8,0.8]) ax2.plot(range(10,20)) 

Matplotlib在版本1.0.1之前, show() 只应该在每个程序中调用一次 ,即使它在某些环境(某些后台,某些平台等)中似乎可以工作。

相关的绘图function实际上是draw()

 import matplotlib.pyplot as plt plt.plot(range(10)) # Creates the plot. No need to save the current figure. plt.draw() # Draws, but does not block raw_input() # This shows the first figure "separately" (by waiting for "enter"). plt.figure() # New window, if needed. No need to save it, as pyplot uses the concept of current figure plt.plot(range(10, 20)) plt.draw() # raw_input() # If you need to wait here too... # (...) # Only at the end of your program: plt.show() # blocks 

show()是一个无限循环,用于处理各种graphics中的事件(resize等),这一点很重要。 请注意,原则上,如果在脚本的开始处调用matplotlib.ion() ,则调用draw()是可选的matplotlib.ion()尽pipe如此,我在某些平台和后端看到了这种情况)。

我不认为Matplotlib提供了一个机制来创build一个graphics,并有select地显示它; 这意味着将显示使用figure()创build的所有graphics。 如果你只需要依次显示单独的数字(或者在同一个窗口中),你可以像上面的代码一样。

现在,上面的解决scheme可能足以满足一些Matplotlib后端的情况。 一些后端很好,可以让你与第一个数字交互,即使你没有调用show() 。 但据我所知,他们不一定要很好。 最可靠的方法是在一个单独的线程中启动每个graphics,在每个线程中都有一个最终的show() 。 我相信这实际上是IPython所做的。

上面的代码大部分时间应该足够了。

PS :现在,使用Matplotlib版本1.0.1+,可以多次调用show() (大多数后端)。

也许你需要阅读关于Matplotlib的交互式用法 。 但是,如果要构build应用程序,则应该使用API并将数字embedded到所选GUI工具箱的窗口中(请参阅examples/embedding_in_tk.py等)。