如何在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
等)。