如何使用pyplot的多个图形对象?

时间:2019-04-05 11:35:29

标签: python matplotlib parameters figure

我真的不了解pyplot中许多图形对象的用法。

假设我用plt.figure()绘制了两个具有两个数字(1、2)的图。

plt.figure(1, figsize=(10,4))    
plt.subplot(1, 3, 1)    
plt.bar(category, values)    
plt.subplot(1, 3, 2)    
plt.scatter(category, values)    
plt.subplot(1, 3, 3)    
plt.plot(category, values)    
plt.suptitle('multiple plotting')
plt.show()
plt.figure(2, figsize=(10,5))    
plt.subplot(3, 1, 1)    
plt.bar(category, values)    
plt.subplot(3, 1, 2)    
plt.scatter(category, values)    
plt.subplot(3, 1, 3)    
plt.plot(category, values)    
plt.suptitle('multiple plotting')
plt.show()

然后...当我想再次绘制图1时该怎么办?

我想我能理解如何设定一个数字, 但是,当我使用它以及如何使用时,确实没有得到它。

谢谢您的解释!

3 个答案:

答案 0 :(得分:0)

在您的情况下,我将把句柄存储到子图中(请参见下面的示例)。这样,您以后可以通过以下方式再次访问任何子图:handle.plot(...)

import numpy as np
import matplotlib.pyplot as plt

plt.figure(1, figsize=(10,4))
ax1 = plt.subplot(1, 3, 1)
ax1.plot(np.random.rand(3,2))
ax2 = plt.subplot(1, 3, 2)
ax2.plot(np.random.rand(3,2))
ax3 = plt.subplot(1, 3, 3)
ax3.plot(np.random.rand(3,2))
plt.suptitle('multiple plotting')

ax1.plot(np.random.rand(3,2)) # Plot in first subplot again
ax2.plot(np.random.rand(3,2)) # Plot in second subplot again
plt.show()

如果您想使用数字来显示子图,则可以执行以下操作:

fig,ax = plt.subplots(nrows=1,ncols=3,figsize=(10,4))
ax[0].plot(np.random.rand(3,2))
ax[1].plot(np.random.rand(3,2))
ax[2].plot(np.random.rand(3,2))
plt.suptitle('multiple plotting')

ax[0].plot(np.random.rand(3,2))
ax[1].plot(np.random.rand(3,2))
plt.show()

希望这对您有帮助!

答案 1 :(得分:0)

致电plt.show()后,您将无法再次绘制这些图形(除非您处于某个交互式会话(?)中)。因此,假设您尚未致电plt.show()。在这种情况下,您可以通过figure(1)重新激活第一个数字。

plt.figure(1, figsize=(10,4))    
plt.plot(...)

plt.figure(2, figsize=(10,5))    
plt.plot(...)

plt.figure(1)
plt.plot(...)  # <--- This plots to figure 1 again.

plt.show()

答案 2 :(得分:0)

只需查看pyplot.figure的官方文档,您就可以实例化Figure,即:

  

所有绘图元素的顶级容器。

因此,重用图形实例的简单方法是:

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)
def g(t):
    return np.sin(t) * np.cos(1/(t+0.1))

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

fig = plt.figure(1, figsize=(10,4))
fig.suptitle('First figure instance')


plt.figure(2, figsize=(10,5))
plt.subplot(1, 2, 1)
plt.bar(t1, f(t1))
plt.subplot(1, 2, 2)
plt.scatter(t2, g(t2))
plt.suptitle('second plot')
plt.show()

sub1 = fig.add_subplot(221)
sub1.plot(t1, g(t1))
sub2 = fig.add_subplot(224)
sub2.plot(t2, f(t2))
fig.savefig("first_figure.png", dpi=200)