只显示选定的或特定的matplotlib数字。

问题描述 投票:9回答:2

我正在生成总共50多个数字,但我不想全部显示。我想挑选出我想显示的数字。有什么方法可以做到这一点吗?

例如:我有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
python matplotlib plot figure
2个回答
9
投票

如果你真的只想绘制一些,你可以通过调用 show 个数字的方法,只要你用了 plt.figure. 例如,如果你制作了fig1和fig2,如果你调用了 fig2.show() 而不是 plt.show(). 然而,我同意jeanrc的评论--你应该在制作之前剔除你想要的情节,而不是保留一大堆未显示的情节(它们仍然会占用内存,你必须记得清理它们!)。

此外,我强烈建议不要使用pylab,尤其是不要使用 "plt "作为它的导入别名。 "plt "传统上是用于pyplot,而不是pylab。(import matplotlib.pyplot as plt). Pylab包括一大堆其他的东西,除了交互式工作外,不鼓励使用。

最后,你在循环中覆盖了 "fig1"。 试着将数字保存在一个列表中,而不是一个单一的变量中。


1
投票

根据你创建了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()
© www.soinside.com 2019 - 2024. All rights reserved.