加快在matplotlib中绘制图像的速度

时间:2015-11-09 03:40:01

标签: python matplotlib spyder

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

var animationslidepicture1 = function () {

    $('#picture1').delay(24500)
                  .animate({left: '0%'}, 1500)
                  .delay(5000)
                  .animate({left: '-100%'}, 1500)
                  .animate({opacity: '0'}, 1)
                  .animate({left: '100%'}, 1)
                  .animate({opacity: '1'}, 1, animationslidepicture1);

};
animationslidepicture1();

问题在于我的思维速度比我的计算机快:)。计算机响应Enter键需要5或6秒钟,响应后需要几秒钟才能更新。通过数百张大多数精细的图像来制作糟糕的人体工程学设计。任何精简这段代码的想法都会非常感激。

2 个答案:

答案 0 :(得分:5)

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

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

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

Why does my pylab animation slow down with each update?

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

答案 1 :(得分:2)

您可以更改matplotlib后端并检查哪个更适合您的情节。

您可以按照答案https://stackoverflow.com/a/30655528/2632856

中的说明尝试GTKAgg后端

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

import matplotlib
matplotlib.use('GTKAgg')

您还可以尝试其他后端。请参阅此链接以获取可用的后端http://matplotlib.org/faq/usage_faq.html#what-is-a-backend