【问题标题】:Show only selected or specific matplotlib figures仅显示选定或特定的 matplotlib 图形
【发布时间】:2015-09-23 18:54:06
【问题描述】:

我总共生成了 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

【问题讨论】:

  • 您可以在致电plt.show() (if (....) plt.close(fig1)) 之前关闭不想看到的数字。
  • 但是为什么你需要把它们都画出来呢?为什么你不能在实际绘制图形之前应用你的决策标准?
  • 谢谢@jeanrjc!当时我的想法不是很好。我找到了一种在全部绘制之前只绘制我想要的数字的方法。

标签: python matplotlib plot figure


【解决方案1】:

在脚本中做你想做的事情会很棘手;我同意 jrjc 的评论——你应该在制作它们之前清除你想要的地块,而不是试图保留大量未显示的地块(它们仍然占用内存,你必须记住清理它们!)。如果您处于交互模式,您可以使用单个图形的show 方法(例如fig2.show())显示单个图形,只要您使用plt.figure 制作图形,但在这种情况下,它们会无论如何都会显示它们。

此外,我强烈建议不要使用 pylab,尤其是不要使用“plt”作为它的导入别名。 “plt”传统上用于 pyplot,而不是 pylab。 (import matplotlib.pyplot as plt)。 Pylab 包含大量其他内容,不鼓励使用,除非是交互式工作。

最后,您将在循环中覆盖“fig1”。尝试将数字保存到列表而不是单个变量中。

【讨论】:

  • fig.show() 仅在交互模式下有效。 OP 正在使用脚本。
【解决方案2】:

根据您创建了 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() 在脚本中不起作用。

按照 cmets 中的建议,您可以在调用之前关闭不想看到的数字:

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()

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2019-05-12
    • 2021-01-19
    • 2014-08-26
    相关资源
    最近更新 更多