仅显示选定的或特定的 matplotlib 图形
Show only selected or specific matplotlib figures
我总共生成了 50 多个数字,但我不想全部显示。我想挑选出我想要显示的数字。有什么办法吗?
例如:我有 50 个图是在程序过程中生成的。最后,当我输入 plt.show() 时,它会显示所有数字。但是,我只想显示 3 或 4 个数字(但它们不是固定的,即我可以一次绘制数字 1、2、3、4,另一次我可以绘制数字 10、27、33、45) .此外,一个单独的函数正在生成这些数字,我正在返回所有数字。
示例主脚本:
import matplotlib.pylab as plt
import numpy as np
from sampleplotfn import *
A = 1
omega = np.linspace(10,35,50)
for i in range(len(omega)):
fig1 = sinewave(A,omega[i])
plt.show()
samplepltfn.py
import numpy as np
import matplotlib.pylab as plt
def sinewave(A,omega):
t = np.linspace(0,10,25)
f = A*np.sin(omega*t)
fig1 = plt.figure()
plt.plot(f,t)
return fig1
在脚本中做你想做的事情会很棘手;我同意 jrjc 的评论——你应该在制作之前清除你想要的图,而不是试图保留大量未显示的图(它们仍然占用内存,你必须记得清理它们!)。如果您处于交互模式,您可以使用单个图形的 show
方法显示单个图(例如 fig2.show()
),只要您使用 plt.figure
制作图形,但是在那种情况下,无论如何它们都会被显示出来。
此外,我强烈建议不要使用 pylab,尤其是不要使用“plt”作为它的导入别名。 “plt”传统上用于 pyplot,而不是 pylab。 (import matplotlib.pyplot as plt
)。 Pylab 包含大量其他内容,除了交互式工作外,不鼓励使用它。
最后,您将在循环中覆盖“fig1”。尝试将数字保存到列表而不是单个变量中。
根据你创建了2个数字,但你只想显示第一个:
import random
f1, a1 = plt.subplots()
a1.plot(random.sample(range(100), 20))
f2, a2 = plt.subplots()
a2.plot(random.sample(range(100), 20))
f1.show()
在脚本中不起作用。
如评论中所建议,您可以在致电之前关闭您不想看到的数字:
plt.close(f2)
plt.show()
一种适用于大量图形的更通用的解决方案是遍历所有图形并关闭它们,但要显示的图形除外:
for fig_num in plt.get_fignums():
if figure.number != fig_num:
plt.close(figure.number)
plt.show()
或者,使用生成器:
[plt.close(f) for f in plt.get_fignums() if f != f1.number]
plt.show()
我总共生成了 50 多个数字,但我不想全部显示。我想挑选出我想要显示的数字。有什么办法吗?
例如:我有 50 个图是在程序过程中生成的。最后,当我输入 plt.show() 时,它会显示所有数字。但是,我只想显示 3 或 4 个数字(但它们不是固定的,即我可以一次绘制数字 1、2、3、4,另一次我可以绘制数字 10、27、33、45) .此外,一个单独的函数正在生成这些数字,我正在返回所有数字。
示例主脚本:
import matplotlib.pylab as plt
import numpy as np
from sampleplotfn import *
A = 1
omega = np.linspace(10,35,50)
for i in range(len(omega)):
fig1 = sinewave(A,omega[i])
plt.show()
samplepltfn.py
import numpy as np
import matplotlib.pylab as plt
def sinewave(A,omega):
t = np.linspace(0,10,25)
f = A*np.sin(omega*t)
fig1 = plt.figure()
plt.plot(f,t)
return fig1
在脚本中做你想做的事情会很棘手;我同意 jrjc 的评论——你应该在制作之前清除你想要的图,而不是试图保留大量未显示的图(它们仍然占用内存,你必须记得清理它们!)。如果您处于交互模式,您可以使用单个图形的 show
方法显示单个图(例如 fig2.show()
),只要您使用 plt.figure
制作图形,但是在那种情况下,无论如何它们都会被显示出来。
此外,我强烈建议不要使用 pylab,尤其是不要使用“plt”作为它的导入别名。 “plt”传统上用于 pyplot,而不是 pylab。 (import matplotlib.pyplot as plt
)。 Pylab 包含大量其他内容,除了交互式工作外,不鼓励使用它。
最后,您将在循环中覆盖“fig1”。尝试将数字保存到列表而不是单个变量中。
根据你创建了2个数字,但你只想显示第一个:
import random
f1, a1 = plt.subplots()
a1.plot(random.sample(range(100), 20))
f2, a2 = plt.subplots()
a2.plot(random.sample(range(100), 20))
f1.show()
在脚本中不起作用。
如评论中所建议,您可以在致电之前关闭您不想看到的数字:
plt.close(f2)
plt.show()
一种适用于大量图形的更通用的解决方案是遍历所有图形并关闭它们,但要显示的图形除外:
for fig_num in plt.get_fignums():
if figure.number != fig_num:
plt.close(figure.number)
plt.show()
或者,使用生成器:
[plt.close(f) for f in plt.get_fignums() if f != f1.number]
plt.show()