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

Mar*_*van 4 python plot matplotlib

我需要用 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()
Run Code Online (Sandbox Code Playgroud)

n=10000 需要几秒钟,但如果我们将矩形的数量增加到 100K,则需要太多时间。有什么建议可以改进它,或者在合理的时间内使用不同的方法来制作情节?

Mar*_*ius 6

将所有补丁一次添加到绘图中,PatchCollection产生大约 2-3 倍的加速,n = 10,000,但我不确定它会扩展到更大的数字有多好:

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()
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢。我确认你的方法产生了 3 倍的加速。对于 10 万个对象,它需要大约 40 秒对大约 2 米 30 秒。 (2认同)