无论如何,要在Python中快速绘制多条线?如果可能的话,首选 Matploblib

Fin*_*nix 3 python matplotlib

我有一个 geoJson 文件。一个 JSON 类型文件,它有 93k 行的许多点(387k)坐标。我想知道是否可以使用 python 将所有这些线快速绘制成一个图形,因为我需要稍后为不同的时间间隔创建许多热图。

目前我正在使用 matplotlib

import matplotlib
matplotlib.use('Agg')
from matplotlib import pyplot as plt
# draw road network
# roadSegs structure: {road_segment1:[[line1_x, line1_y],...],...}
figure, ax = plt.subplots(1, 1)
ax.set_xlim(x_min - 100.0, x_max + 100.0)
ax.set_ylim(y_min - 100.0, y_max + 100.0)
for feature_id, lines in roadSegs.iteritems():
    for line in lines:
        ax.plot(line[0], line[1])
plt.savefig('road.png')
Run Code Online (Sandbox Code Playgroud)

我需要使用非交互式后端,因为此代码将位于服务器中。我尝试只绘制一张地图。已经花了15分钟,还没有结束。有什么想法可以提高速度吗?我知道 matplotlib 不是为大型数据集可视化而设计的,但我的数据集小于 1M 点。有什么想法可以提高其性能吗?如果推荐其他库,我应该使用哪一个?至少它必须让我渲染线条并改变图形大小。

Fin*_*nix 7

pyplot 教程下有一节显示绘制多条线,只需执行 pyplot.plot(line1_x, line1_y, line2_x, line2_y,...) 即可。我只需更改代码以调用 ax.plot() 一次:

figure, ax = plt.subplots(1, 1)
ax.set_xlim(x_min - 100.0, x_max + 100.0)
ax.set_ylim(y_min - 100.0, y_max + 100.0)
drawLines = []
for feature_id, lines in roadSegs.iteritems():
    for line in lines:
        drawLines.append(line[0])
        drawLines.append(line[1])
ax.plot(*drawLines)
plt.savefig('road.png')
Run Code Online (Sandbox Code Playgroud)

现在可以了。绘制我的道路网络大约​​需要 4 分钟。感谢@ImportanceOfBeingErnest 指出了我的代码的瓶颈。

  • 我猜你的意思是瓶颈:-D (5认同)