gpt4 book ai didi

python - 为什么 matplotlib 使用plot()画线时会变慢?

转载 作者:行者123 更新时间:2023-12-01 04:12:42 24 4
gpt4 key购买 nike

我想知道为什么用matplotlib画线会很慢?如何解决?

下面是演示代码。它使用 plot() 在两个随机生成的点之间绘制一条线。

在我的计算机上,“END=100/200/500”结果为“FPS=36.9/28.6/20”。我需要无休止地画线,暂时情况会变得更糟。怎么解决呢?谢谢!

import numpy as np
import matplotlib.pyplot as plt
import time

def draw_demo():
x = 100
plt.axis([0, x, 0, 1])
plt.ion()

last = 50
TIME = 5
END = 1000
time_start = time.time()

for i in range(0, END):
random_num = np.random.random()

if i > 70:
plt.axis([x - 100, x + 1, 0, 1])
x += 1

plt.plot([i, i + 1], [last, random_num])
last = random_num

plt.pause(0.0001)

print ('FPS:', END/(time.time()-time_start))
raw_input()

if __name__ == '__main__':
draw_demo()

最佳答案

尝试如下:

import numpy as np
import matplotlib.pyplot as plt
import time

def draw_demo2(ax):
x = 100
ax.set_xlim([x-100, x + 250])
ax.set_ylim([0, 1])

END = 250
time_start = time.time()

ln, = ax.plot([], [])
x_data = []
y_data = []
for i in range(0, END):
random_num = np.random.random()

if i%100 == 99:
cur_xlim = ax.get_xlim()
ax.set_xlim(np.array(cur_xlim) + 100)
x += 1
x_data.append(x)
y_data.append(random_num)
ln.set_data(x_data, y_data)
ax.figure.canvas.draw_idle()
ax.figure.canvas.flush_events()

print ('FPS:', END/(time.time()-time_start))


if __name__ == '__main__':
draw_demo()

可能值得将 x 和 y 数据缓冲区截断到 View 范围(因为每次绘制屏幕时列表都会转换为数组。

如果您需要非常快速地研究位图传输,但这与更改限制不能很好地交互,那么重绘文本是绘制图形最慢的部分之一。

还尝试使用 qt 而不是 tk,我发现该更改的速度提高了 4 倍。

关于python - 为什么 matplotlib 使用plot()画线时会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com