Matplotlib 在pyplot中创建多个图形,但仅显示一个

Matplotlib 在pyplot中创建多个图形,但仅显示一个,matplotlib,Matplotlib,我有一个脚本,可以生成许多不同的数字,并将句柄保存到字典中。通常我想画所有的,但有时我只画一个,只想画那个 我的理解是plt.show()将显示所有绘图。如果我分配figures句柄(即dofig1=plt.figures()),然后使用只显示与该句柄关联的图形的fig1.show(),这似乎是合乎逻辑的 这里是一个MWE: import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 100) y1 = np.rand

我有一个脚本,可以生成许多不同的数字,并将句柄保存到字典中。通常我想画所有的,但有时我只画一个,只想画那个

我的理解是
plt.show()
将显示所有绘图。如果我分配figures句柄(即do
fig1=plt.figures()
),然后使用只显示与该句柄关联的图形的
fig1.show()
,这似乎是合乎逻辑的

这里是一个MWE:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100)
y1 = np.random.rand(100)
y2 = np.random.rand(100)

fig1 = plt.figure()
plt.plot(x, y1, 'o')

fig2 = plt.figure()
plt.plot(x, y2, 'o')

fig1.show()
这似乎可行,但图形创建后立即消失。我的理解是
fig1.show()
需要在一个循环中,因为类
Figure.show()
方法不像
plt.show()那样调用while循环

我意识到这与以下问题类似: 但公认的答案似乎并没有解决最初的问题(正如评论中指出的那样)


在while循环中放置
fig1.show()
是否正确?如果是这样,您是如何做到这一点的?

您可以添加一条等待用户输入的语句,然后该图将显示,并在您按键后关闭:

fig1.show() 
raw_input()

您可以添加一条等待用户输入的语句,然后显示该图,并在您按键后关闭:

fig1.show() 
raw_input()

您可以关闭除要显示的图形之外的所有其他图形。然后调用
plt.show()
将只显示一个尚未关闭的图形

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100)
y1 = np.random.rand(100)
y2 = np.random.rand(100)

fig1 = plt.figure()
plt.plot(x, y1, 'o')

fig2 = plt.figure()
plt.plot(x, y2, 'o')

def figshow(figure):
    for i in plt.get_fignums():
        if figure != plt.figure(i):
            plt.close(plt.figure(i))
    plt.show()

figshow(fig2)

您可以关闭除要显示的图形之外的所有其他图形。然后调用
plt.show()
将只显示一个尚未关闭的图形

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100)
y1 = np.random.rand(100)
y2 = np.random.rand(100)

fig1 = plt.figure()
plt.plot(x, y1, 'o')

fig2 = plt.figure()
plt.plot(x, y2, 'o')

def figshow(figure):
    for i in plt.get_fignums():
        if figure != plt.figure(i):
            plt.close(plt.figure(i))
    plt.show()

figshow(fig2)

这么简单,但把戏做得很完美!我的印象是,
show()
在消失之前只是短暂出现。我猜它会一直显示图形,直到整个脚本被处理。有道理。对于Python3用户来说,
raw\u input()
input()
替换为如此简单,但却完美地完成了这个技巧!我的印象是,
show()
在消失之前只是短暂出现。我猜它会一直显示图形,直到整个脚本被处理。有道理。对于Python3用户,
raw\u input()
被替换为
input()
,但我收到了大量警告消息(
无法调用“event”命令:应用程序已被销毁
)。不过我喜欢你的功能。可以编辑以允许一个数字列表,这比全部写出要快得多。警告可能来自于在交互模式下运行此命令?
plt.ioff()
会摆脱它们吗?不会,
plt.ioff()
似乎不会改变警告。这是完整的信息。对于每个关闭的绘图,我都会得到一个这样的结果:“无法调用“event”命令:在执行从“ttk::ThemeChanged”中调用的“event generate$w”(过程“ttk::ThemeChanged”第6行)时,应用程序已被破坏。tk后端似乎存在更严重的问题。我尝试了导入matplotlib;matplotlib.use(“Qt5Agg”)
可以正常工作。请注意,现在应该已经解决了这个问题。该错误修复可能会进入matplotlib的3.0.2版本,该版本很快就会出现。这是可行的,但我收到了大量警告消息(
无法调用“event”命令:应用程序已被销毁
)。不过我喜欢你的功能。可以编辑以允许一个数字列表,这比全部写出要快得多。警告可能来自于在交互模式下运行此命令?
plt.ioff()
会摆脱它们吗?不会,
plt.ioff()
似乎不会改变警告。这是完整的信息。对于每个关闭的绘图,我都会得到一个这样的结果:“无法调用“event”命令:在执行从“ttk::ThemeChanged”中调用的“event generate$w”(过程“ttk::ThemeChanged”第6行)时,应用程序已被破坏。tk后端似乎存在更严重的问题。我尝试了导入matplotlib;matplotlib.use(“Qt5Agg”)可以正常工作。请注意,现在应该已经解决了这个问题。该错误修复可能会出现在matplotlib的3.0.2版本中,该版本很快就会出现。