最差的性能阻碍了Python的实时绘图

时间:2019-05-01 11:26:29

标签: python plot while-loop

编辑:

我正在运行一种遗传算法,并希望随着算法的发展来绘制每一代的适应度。目前,我的代码是这样的:

# INITIALIZATION - PLEASE NOTE: INCOMPLETE EXAMPLE
fig = plt.figure(1)
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_xlim([0, generations])
ax1.set_ylim([1000, 10000])
ax1.set_title('Creature fitness')
ax1.set_ylabel('Fitness')
ax1.set_xlabel('Generations')
xs = []
ys = []

line, = ax1.plot(xs, ys)

generation = 1
generations = 100

while generation < generations:

    # - some calculations here

    generation_fitness = x # from calculations above

    xs.append((generation))
    ys.append((generation_fitness))
    line.set_xdata(xs)
    line.set_ydata(ys)
    plt.pause(0.1)

但是,这会产生非常口吃的图形,如下所示:so
而且我认为这会减慢代码执行速度。

我希望拥有类似“风速”图here的图形,但希望它不会那么复杂。

1 个答案:

答案 0 :(得分:0)

您的问题不是很具体,但是对于这些类型的问题,通常,您应该将UI(图形)和应用程序逻辑分离到线程中,以使它们不会相互干扰。

您应该启动一个单独的线程来渲染图形,并使用一些线程安全的构造将数据从逻辑线程传递到渲染线程。在这种情况下,您可能需要queue.Queue(将其谷歌搜索)。