是否可以使用 geopandas 将地图居中?

Is it possible to center a map using geopandas?

我正在 geopandas 地图上绘制点对。一切正常,但问题是默认的世界地图以大西洋为中心,但我希望它以太平洋为中心。我已经查看了文档,但找不到执行此操作的方法。

默认情况下地图绘制方式的图片:

我希望地图如何绘制的图片:

可以使用以下代码重现情节:

import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world.plot()

我试过使用:plt.xlim([180,-180])

这会翻转地图,但不会移动中心。

我试过了:plt.xlim([0,360])

但正如预期的那样,这不起作用,因为 matplotlib 不知道经度也可以设置为 0 到 360。

是否有替代方法?

感谢所有回复的人。我从 Set centre of geopandas map 改编了 Russell Jarvis 的解决方案。我分享是因为之前的答案是使用 networkx 并且我使用了 geopandas DataFrame 并直接更新了几何图形,返回了更新后的数据框。我为忽略这些而道歉,似乎当我创建问题时,我输入了“contextily”而不是“geopandas”并错过了它们!

def shift_geom(self,shift, gdataframe, gdf1, gdf2, plotQ=True):
    # this code is adapted from answer found in SO
    # will be credited here: ???
    shift -= 180
    moved_geom = []
    splitted_geom = []
    border = LineString([(shift,90),(shift,-90)])

    for row in gdataframe["geometry"]:
        splitted_geom.append(split(row, border))
    for element in splitted_geom:
        items = list(element)
        for item in items:
            minx, miny, maxx, maxy = item.bounds
            if minx >= shift:
                moved_geom.append(translate(item, xoff=-180-shift))
            else:
                moved_geom.append(translate(item, xoff=180-shift))

    # got `moved_geom` as the moved geometry            
    moved_geom_gdf = gpd.GeoDataFrame({"geometry": moved_geom})

    # can change crs here
    if plotQ:
        fig1, ax1 = plt.subplots(figsize=[8,6])
        moved_geom_gdf.plot(ax=ax1)
        plt.show()
        
    geom1 = gdf1.geometry.values
    geom2 = gdf2.geometry.values
    moved_map_points1 = []
    moved_map_points2 = []
    lines = []


    for element in geom1:

        if float(element.x) >= shift:        
            moved_map_points1.append(translate(element, xoff=-180-shift))
        else:
            moved_map_points1.append(translate(element, xoff=180-shift))

    for element in geom2:

        if float(element.x) >= shift:        
            moved_map_points2.append(translate(element, xoff=-180-shift))
        else:
            moved_map_points2.append(translate(element, xoff=180-shift))
        
    gdf1 = gdf1.set_geometry(moved_map_points1)
    gdf2 = gdf2.set_geometry(moved_map_points2)
    
    for el in range(len(moved_map_points1)):
        lines.append(LineString([(moved_map_points1[el].x, moved_map_points1[el].y),
(moved_map_points2[el].x, moved_map_points2[el].y)]))
    
    gdfl = gdfl.set_geometry(lines)

    return moved_geom_gdf,gdf1,gdf2,gdfl

结果如下图: