无论如何,要在python中快速绘制许多行吗?如有可能,首选Matploblib

无论如何,要在python中快速绘制许多行吗?如有可能,首选Matploblib,python,matplotlib,Python,Matplotlib,我有一个geoJson文件。一个JSON类型的文件,它有许多点(387k)坐标用于93k行。我想知道是否有可能使用python将所有这些线快速绘制成一个图形,因为我需要在以后为不同的时间间隔创建许多热图 目前我正在使用matplotlib import matplotlib matplotlib.use('Agg') from matplotlib import pyplot as plt # draw road network # roadSegs structure: {road_segme

我有一个geoJson文件。一个JSON类型的文件,它有许多点(387k)坐标用于93k行。我想知道是否有可能使用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')
我需要使用非交互式后端,因为此代码将在服务器中。我试着只画一张地图。它已经花了15分钟,还没有结束。有什么办法提高速度吗?我知道matplotlib不是为大型数据集可视化而设计的,但我的数据集小于1M点。有没有改进其性能的想法?如果建议使用其他库,我应该使用哪一个?至少它必须允许我渲染线条并更改图形大小。

在该显示下有一个部分可以绘制多条线条,只需执行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')
现在可以了。大约需要4分钟来绘制我的道路网。感谢@ImportanceOfBeingErnest指出了我的代码的底部瓶颈

在“显示”下有一个部分可以绘制多条线,只需执行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')

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

线路是否有某种连接?
[line1\u x,line1\u y]
[line2\u x,line2\u y]
之间有什么关系吗?bokeh/datashader看起来有用吗@贝内斯特:是的。一些路段(关键点)与其他几个路段相连。所以,我可以画一些更长的线,画一条而不是多条。下颈部是由for循环中的“ax.plot”引起的吗?如果我将这些线视为一条长线,我会遇到另一个问题:我需要在某个道路段下渲染这些线,以突出显示它们以创建热图。如果您可以减少对
plt.plot
的调用次数,那么肯定会有帮助。然而,我高度怀疑绘制93k线是否有任何意义。@importantanceofbeingernest:我知道这非常昂贵。但我在画道路网。一些单线道路因长度而被分割成段,但大多数是通过交叉口和转弯分割的。我只有每个线段上点的坐标。重建每条道路很困难,因为我不知道哪一段属于哪一条道路。是否有任何库可以让我廉价地绘制每条线段?这些线段是否以某种方式连接?
[line1\u x,line1\u y]
[line2\u x,line2\u y]
之间有什么关系吗?bokeh/datashader看起来有用吗@贝内斯特:是的。一些路段(关键点)与其他几个路段相连。所以,我可以画一些更长的线,画一条而不是多条。下颈部是由for循环中的“ax.plot”引起的吗?如果我将这些线视为一条长线,我会遇到另一个问题:我需要在某个道路段下渲染这些线,以突出显示它们以创建热图。如果您可以减少对
plt.plot
的调用次数,那么肯定会有帮助。然而,我高度怀疑绘制93k线是否有任何意义。@importantanceofbeingernest:我知道这非常昂贵。但我在画道路网。一些单线道路因长度而被分割成段,但大多数是通过交叉口和转弯分割的。我只有每个线段上点的坐标。重建每条道路很困难,因为我不知道哪一段属于哪一条道路。有没有一个库可以让我便宜地画每条线段?我想你是指瓶颈