我正在开发一个项目,使用形状文件制作美国的分级地图。为此,我从美国人口普查局这里下载了标准形状文件。经过一些整理(一些多余的岛屿领土通过更改绘图轴限制进行去除),我能够让连续的州地图与matplotlib图形的边界完美契合。请参见下面的编辑4作为参考。
编辑1:我使用的是cb_2018_us_state_500k.zip [3.2 MB]形状文件。
现在唯一的问题是,通过设置轴限制,我不能再看到阿拉斯加和夏威夷(因为这些显然被限制的轴限制切掉)。我现在想把这两个多边形添加回我的地图中,但现在放到图形的下部(这是大多数此类地图给予的处理方式),尽管这样做在地理上不准确。
更具体地说,我希望选择代表阿拉斯加和夏威夷的多边形形状,并将它们移动到我的图形的左下角。这是可能的吗?
我可以使用布尔蒙版创建:
现在唯一的问题是,通过设置轴限制,我不能再看到阿拉斯加和夏威夷(因为这些显然被限制的轴限制切掉)。我现在想把这两个多边形添加回我的地图中,但现在放到图形的下部(这是大多数此类地图给予的处理方式),尽管这样做在地理上不准确。
更具体地说,我希望选择代表阿拉斯加和夏威夷的多边形形状,并将它们移动到我的图形的左下角。这是可能的吗?
我可以使用布尔蒙版创建:
mask = df['STUSPS'] == 'AK'
我想单独获取该州的多边形;然而,我现在有点困惑如何在选择后移动/重新定位它。
编辑2:因为每个州都由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
# import the United States shape file
df = gpd.read_file('Desktop/cb_2018_us_state_500k/cb_2018_us_state_500k.shp')
# exclude the values that we would not like to display
exclude = df[~df['STUSPS'].isin(['PR', 'AS', 'VI', 'MP', 'GU','AK'])]
# create a plot figure
fig, ax = plt.subplots(1, figsize=(20, 10))
exclude.plot(column="NAME", ax=ax)
_ = ax.set_xlim([-130, -64])
_ = ax.set_ylim([22, 53])
我现在有一个示例图:
非常感谢提供任何见解或资源链接,解释或示例。
注意: 从技术上讲,我可以通过使用已经在此位置包括阿拉斯加和夏威夷的形状文件(例如由内政部提供的形状文件)来避免这个问题; 然而,如果我想添加关岛或波多黎各,则无法使用此方法。
期望的结果:
编辑4: 我想要做类似于这个问题的事情,但是用Python而不是R。
图片来源: Murphy