在 geopandas 地图上叠加 matplotlib 极坐标轴

问题描述 投票:0回答:1

我想在以特定点为中心的 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)

产生这个数字:

enter image description here

注意该点如何稍微偏离极轴原点。

如果我在

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)

enter image description here

我的问题:有没有更好的方法来做到这一点(即,自动调整极轴,使它们与 geopandas 图位于同一位置的中心)?

rect
参数的“调整因子”是否普遍适用,还是取决于我正在绘制的地理数据框的细节?

python matplotlib geopandas polar-coordinates
1个回答
0
投票

在匹配参考点的条件下将极坐标图放置在前一个图的顶部需要该点的坐标及其相关的坐标变换。这是一个可能的解决方案。

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)

polar-on-gdfplot

© www.soinside.com 2019 - 2024. All rights reserved.