我有一个 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 点。有什么想法可以提高其性能吗?如果推荐其他库,我应该使用哪一个?至少它必须让我渲染线条并改变图形大小。
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 指出了我的代码的瓶颈。
| 归档时间: |
|
| 查看次数: |
2287 次 |
| 最近记录: |