Python 使用matplotlib模块连续显示图片

我也不知道为什么这样写有的需要show(),循环的时候就不用,求大给我讲解,另外,循环显示多张图片时该如何写才能优雅

显示一张简单的代码如下

from matplotlib import pyplot as plt
import numpy as np
plt.imshow(np.random.randint(0, 2, (2, 2)))
plt.show()

Python 使用matplotlib模块连续显示图片_第1张图片
连续的一张图变化这样写

from matplotlib import pyplot as plt
import numpy as np
while 1:
    plt.cla()
    plt.imshow(np.random.randint(0, 2, (2, 2)))
    plt.pause(0.1)

有时候需要两张图一起对比着看,我写了这样的代码,但是图片多了或者图片大了就有卡顿的感觉,我觉得是内存没清除掉,求大佬指导

from matplotlib import pyplot as plt
import numpy as np
while 1:
    plt.cla()
    ax1 = plt.subplot(1, 2, 1)
    ax1.imshow(np.random.randint(0, 2, (2, 2)))
    ax2 = plt.subplot(1, 2, 2)
    ax2.imshow(np.random.randint(0, 2, (2, 2)))
    plt.pause(0.1)
    ax1.cla()
    ax2.cla()

Python 使用matplotlib模块连续显示图片_第2张图片

连续地看梅尔频谱图,以及音高和能量

# 放在外面
fig, axes = plt.subplots(1, 1, squeeze=False)

def showww(f0, mel_spectrogram, energy):
    def add_axis(fig, old_ax, offset=0):
        ax = fig.add_axes(old_ax.get_position(), anchor='W')
        ax.set_facecolor("None")
        return ax

    axes[0][0].imshow(mel_spectrogram, origin='lower')
    axes[0][0].set_aspect(2.5, adjustable='box')
    axes[0][0].set_ylim(0, 80)
    axes[0][0].set_title('mel_spectrogram', fontsize='medium')
    axes[0][0].tick_params(labelsize='x-small', left=False, labelleft=False)
    axes[0][0].set_anchor('W')

    ax1 = add_axis(fig, axes[0][0])
    ax1.plot(f0, color='tomato')
    ax1.set_xlim(0, mel_spectrogram.shape[1])
    ax1.set_ylim(0, hp.f0_max)
    ax1.set_ylabel('F0', color='tomato')
    ax1.tick_params(labelsize='x-small', colors='tomato', bottom=False, labelbottom=False)

    ax2 = add_axis(fig, axes[0][0], 1.2)
    ax2.plot(energy, color='darkviolet')
    ax2.set_xlim(0, mel_spectrogram.shape[1])
    ax2.set_ylim(hp.energy_min, hp.energy_max)
    ax2.set_ylabel('Energy', color='darkviolet')
    ax2.yaxis.set_label_position('right')
    ax2.tick_params(labelsize='x-small', colors='darkviolet', bottom=False, labelbottom=False, left=False,
                    labelleft=False, right=True, labelright=True)

	# 遍历代码
    plt.ion()
    plt.pause(1)
    ax1.cla()
    ax2.cla()
    ax1.axis('off')
    ax2.axis('off')

# 循环showww方法即可

你可能感兴趣的:(Python)