猿问

什么是 Matplotlib 的“ax1.add_collection”的 Basemap 等价物?

我正在从关系数据库中提取纬度/经度。点是线段的顶点,数据库表的组织方式使得点可以基于线号进行分组并基于点顺序号进行排序。具体来说,数据库表有以下字段:纬度、经度、行号、pt_order_number。


我已将所有线段拉入 Line Collection。它使用 Matplotlib 按预期绘制ax1.add_collection(mylinecollection)。请注意,我使用线集合而不是ax1.plot(long,lat)循环,因为某些数据集有数千条线和数万个点(线集合更快更干净)。


但是,我需要使用 Basemap 绘制这些线集合(以便我有一个漂亮的阴影浮雕和比例尺)。底图无法通过.add_collection(),我不确定替代方案是什么。我在底图教程中找不到答案或明显的替代方法(但也许我错过了)。谢谢你的帮助。


当前代码:


# note linecollection variable produced in function; performs as expected with "ax1.add_collection(linecollection)"

latitude_range = [34.012965603200001, 34.721878621999998]

longitude_range = [-116.76151759999999, -116.33691841200002]


import matplotlib.pyplot as plt

from matplotlib.collections import LineCollection

from mpl_toolkits.basemap import Basemap


south, north = latitude_range[0], latitude_range[1]

west, east = longitude_range[0], longitude_range[1]

center = [(east+west)/2, (north+south)/2]


m = Basemap(llcrnrlon=west, llcrnrlat=south, urcrnrlon=east, urcrnrlat=north,

            resolution='c', epsg=4326,

            lon_0=center[0], lat_0=center[1])


m.arcgisimage(service = "World_Shaded_Relief", xpixels = 2000)

m.add_collection(linecollection) # throws error "AttributeError: 'Basemap' object has no attribute 'add_collection'"


plt.show()


繁星淼淼
浏览 251回答 1
1回答

九州编程

提供上面的评论作为答案:底图使用轴:fig, ax = plt.subplots() m = Basemap(..., ax=ax)在这个轴上你可以调用任何你喜欢的方法,例如ax.add_collection(...)确保首先将线集合的坐标转换为底图单位。
随时随地看视频慕课网APP

相关分类

Python
我要回答