我想在以特定点为中心的 GeoPandas GeoDataFrame 地图上叠加极轴。最终目标是极轴上的图精确地以该点为中心。我已经找到了一种方法来做到这一点,但它很老套,我想知道是否有更好的方法。
问题在于 geopandas 图的中心和极轴略有偏移。例如这段代码:
import geopandas as gpd
lat, lon = 37, -122
gdf = gpd.GeoDataFrame({'id': ['my_point']}, geometry=gpd.points_from_xy([lon], [lat], crs=4326))
fig, ax = plt.subplots()
gdf.plot(ax=ax)
ax.set_axis_off()
polar_ax=fig.add_axes(rect=[0, 0, 1, 1], polar=True, frameon=False)
产生这个数字:
注意该点如何稍微偏离极轴原点。
如果我在
rect
中欺骗 fig.add_axes
参数,我可以让两者对齐:
import geopandas as gpd
lat, lon = 37, -122
gdf = gpd.GeoDataFrame({'id': ['my_point']}, geometry=gpd.points_from_xy([lon], [lat], crs=4326))
fig, ax = plt.subplots()
gdf.plot(ax=ax)
polar_ax=fig.add_axes(rect=[0, 0, 1.025, 0.99], polar=True, frameon=False)
我的问题:有没有更好的方法来做到这一点(即,自动调整极轴,使它们与 geopandas 图位于同一位置的中心)?
rect
参数的“调整因子”是否普遍适用,还是取决于我正在绘制的地理数据框的细节?
在匹配参考点的条件下将极坐标图放置在前一个图的顶部需要该点的坐标及其相关的坐标变换。这是一个可能的解决方案。
import geopandas as gpd
import matplotlib.pyplot as plt
lats, lons = [37,], [-122,] # can add the second point
gdf = gpd.GeoDataFrame({'id': ['my_point',]},
geometry=gpd.points_from_xy(lons, lats, crs=4326))
ax = gdf.plot() # plot blue dots
ax.set_axis_off()
# Figure can be grabbed for use
fig = ax.get_figure()
# Access/get geometries
# Get disp-coord of the point
disp_xy = ax.transData.transform( [lons[0], lats[0]] )
# Get figure-coord of the point
fig_xy = fig.transFigure.inverted().transform( disp_xy )
# Add new axes covering the whole figure extent
pad = 0.4 # some value < 0.5
# Create polar axis
# rect= [left, bottom, width, height]
polar_ax = fig.add_axes(
rect=[fig_xy[0]-pad, fig_xy[1]-pad, 2*pad, 2*pad],
polar=True, frameon=False)