如何加速使用Matplotlib绘制大量矩形的绘图过程?

6

我需要使用Matplotlib绘制大量的矩形对象。这里是一个随机生成n个矩形的简单代码:

import matplotlib
import matplotlib.pyplot as plt
import random

fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
plt.xlim([0, 1001])
plt.ylim([0, 1001])
n=10000
for i in range(0,n):
    x = random.uniform(1, 1000)
    y = random.uniform(1, 1000)
    ax.add_patch(matplotlib.patches.Rectangle((x, y),1,1,))
plt.show()

当n=10000时,需要几秒钟的时间,但如果我们将矩形数量增加到100K,会花费太多时间。

有什么改进建议,或者采用不同的方法在合理的时间内绘制图形呢?


1
我知道你在问关于matplotlib的问题,但在你的情况下,gnuplot可能表现更好。众所周知,与gnuplot相比,matplotlib速度较慢;https://dev59.com/FXNA5IYBdhLWcg3wjOzf - Moritz
谢谢你的建议,我将尝试使用gnuplot。 - Marco Pavan
1个回答

8

使用PatchCollection一次性将所有补丁添加到绘图中,可以使n = 10,000时的速度提高约2-3倍,但我不确定它在更大的数字上的扩展性如何:

from matplotlib.collections import PatchCollection
import matplotlib
import matplotlib.pyplot as plt
import random

fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
plt.xlim([0, 1001])
plt.ylim([0, 1001])
n=10000
patches = []
for i in range(0,n):
    x = random.uniform(1, 1000)
    y = random.uniform(1, 1000)
    patches.append(matplotlib.patches.Rectangle((x, y),1,1,))
ax.add_collection(PatchCollection(patches))
plt.show()

2
非常感谢。我确认您的方法可以使速度提高3倍。使用100K个对象,大约需要40秒,而不是2分30秒。 - Marco Pavan
我的多边形如果通过PatchCollection添加,与直接添加到坐标轴上时看起来不同。可惜这使得图表质量较差且无法使用。 - Michael Currie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接