使用geopandas重排多边形实现matplotlib美国地图阿拉斯加夏威夷移位绘图
我正在开展一个项目,使用shapefile绘制美国分级统计地图,已从美国人口普查局官网下载标准shapefile,经过简单清理(通过修改绘图轴范围剔除了多余的离岛领土)后,已实现美国本土各州在matplotlib画布范围内整齐展示,可参考下方编辑4内容。
编辑1:我使用的shapefile为cb_2018_us_state_500k.zip [3.2 MB]。
目前唯一的问题是,设置轴范围后阿拉斯加和夏威夷被裁剪无法显示,我希望将这两个州的多边形添加到绘图的左下角区域(同类地图的常规处理方式,不要求地理坐标完全准确)。
更具体来说,我需要选中代表阿拉斯加和夏威夷的多边形,将其移动到画布左下角,请问该功能是否可实现?
我已经可以通过以下布尔掩码单独筛选出阿拉斯加的多边形:
mask = df['STUSPS'] == 'AK'
但选中后不知道如何调整其位置,目前卡在这一步。
编辑2:每个州的数据都是geometry数据类型,我是否可以对多边形的每个坐标点应用变换?阿拉斯加的geometry列内容如下:
27 MULTIPOLYGON (((179.48246 51.98283, 179.48656 ... Name: geometry, dtype: geometry
如果将坐标列表中的每个数值乘以同一个常数,是否可以实现缩放移位?我希望将阿拉斯加放置在(-125, 27)附近的左下角区域,夏威夷放在其旁边的(-112, 27)位置。
编辑3:我的现有代码如下:
import geopandas as gpd import matplotlib.pyplot as plt # 导入美国shape文件 df = gpd.read_file('Desktop/cb_2018_us_state_500k/cb_2018_us_state_500k.shp') # 排除不需要展示的区域 exclude = df[~df['STUSPS'].isin(['PR', 'AS', 'VI', 'MP', 'GU','AK'])] # 创建画布 fig, ax = plt.subplots(1, figsize=(20, 10)) exclude.plot(column="NAME", ax=ax) _ = ax.set_xlim([-130, -64]) _ = ax.set_ylim([22, 53])
当前生成的效果图如下:
恳请大家提供相关思路、资源链接、讲解或示例,非常感谢。
注意:理论上我可以直接使用内政部提供的已将阿拉斯加和夏威夷移位的shapefile规避该问题,但如果后续需要添加关岛、波多黎各等领土,该方法就不适用了。
编辑4:我想要实现的效果类似R语言的同类实现方案,只是需要用Python完成。
内容的提问来源于stack exchange,提问作者user12035742

