Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加快在matplotlib中打印图像的速度_Python_Matplotlib_Spyder - Fatal编程技术网

Python 加快在matplotlib中打印图像的速度

Python 加快在matplotlib中打印图像的速度,python,matplotlib,spyder,Python,Matplotlib,Spyder,我在Spyder IDE中编写了一些Python来并排绘制一对图像,以便可以直观地查看它们。大多数时候我只需要3秒钟就可以看到它们,但偶尔我需要更长的时间来仔细观察。因此,我没有使用time.sleep,而是将其编码为等待按下Enter键,如下所示: import matplotlib.pyplot as plt import os def VI_segmentation(): root = os.getcwd() NR_dir = root + '\\Neurite_Resu

我在Spyder IDE中编写了一些Python来并排绘制一对图像,以便可以直观地查看它们。大多数时候我只需要3秒钟就可以看到它们,但偶尔我需要更长的时间来仔细观察。因此,我没有使用time.sleep,而是将其编码为等待按下Enter键,如下所示:

import matplotlib.pyplot as plt
import os

def VI_segmentation():
    root = os.getcwd()
    NR_dir = root + '\\Neurite_Results\\'
    SO_dir = root + '\\Segmentation_Overlays\\'
    jpgs = os.listdir(NR_dir)
    fig = plt.figure(figsize=(20,12))
    for jpg in jpgs:
        fig.suptitle(jpg , fontsize=14, fontweight='bold')
        image_NR = plt.imread(NR_dir + jpg)
        image_SO = plt.imread(SO_dir + jpg)
        plt.subplot(121)
        plt.imshow(image_NR)
        plt.subplot(122)
        plt.imshow(image_SO)
        plt.draw()
        plt.pause(0.01)

        input('Press Enter to continue')

VI_segmentation()

问题是我的思维速度比我的电脑快:)。计算机响应Enter键需要5或6秒钟,响应后需要几秒钟才能更新。在浏览数百张基本上都很好的图像时,会产生糟糕的人体工程学。任何简化此代码的想法都将不胜感激。

您可以更改matplotlib后端并检查哪个更适合您的绘图

您可以尝试GTKAgg后端,如回答中所述:

尝试在matplotlib import语句之后添加第二行代码

import matplotlib
matplotlib.use('GTKAgg')

还有其他的后端,你可以尝试。有关可用的后端,请参见此链接,

此版本的代码最终解决了我的问题:

import matplotlib.pyplot as plt
import os

def VI_segmentation():
    plt.ion()
    root = os.getcwd()
    NR_dir = root + '\\Neurite_Results\\'
    SO_dir = root + '\\Segmentation_Overlays\\'
    jpgs = os.listdir(NR_dir)
    f = plt.figure(figsize=(22,12))
    ax1 = f.add_subplot(121)
    ax2 = f.add_subplot(122)
    image_NR = plt.imread(NR_dir + jpgs[0])
    image_SO = plt.imread(SO_dir + jpgs[0])
    im1 = ax1.imshow(image_NR)
    im2 = ax2.imshow(image_SO) 
    f.suptitle(jpgs[0] , fontsize=14, fontweight='bold')
    f.show()
    plt.pause(0.01)
    input('Press Enter to continue')

    for jpg in jpgs[1:]:
        f.suptitle(jpg , fontsize=14, fontweight='bold')
        image_NR = plt.imread(NR_dir + jpg)
        image_SO = plt.imread(SO_dir + jpg)
        im1.set_data(image_NR)
        im2.set_data(image_SO)
        f.canvas.draw()
        plt.pause(0.01)
        input('Press Enter to continue')

VI_segmentation()
关键是更改绘图中的数据,而不是添加新绘图。这个答案对我很有帮助


奇怪的是,当我开始更改绘图数据而不是重新绘制时,我开始出现奇怪的行为,图形会放大,但周围的窗口不会。不知怎的,这个fig.set_size_inches被破坏了,所以我移动了图形创建和轴创建,以便在创建图形时可以设置图形大小。

因为除了您之外没有人有这些图像,您需要提供更多信息。至少在您的机器上运行缓慢的部分,请阅读以下有关评测的内容: