我正在开展一个项目,其中使用形状文件来制作美国的分区统计图。为此,我从美国人口普查局下载了标准形状文件。经过一些清理(有一些无关的岛屿区域,我通过更改绘图的轴限制来删除它们),我能够使连续的状态完全符合 matplotlib 图形的边界。作为参考,请参阅下面的编辑 4。
编辑 1:我正在使用cb_2018_us_state_500k.zip [3.2 MB]形状文件。
现在唯一的问题是,通过设置轴限制,我现在无法再查看阿拉斯加和夏威夷(因为这些显然是通过限制轴限制而被删除的)。我现在想将这两个多边形添加回我的地图中,但现在朝向绘图的下部(大多数其他此类地图给出的处理方式),尽管其地理不准确。
更具体地说,我有兴趣选择代表阿拉斯加和夏威夷的多边形形状并将它们移动到我的图形的左下侧。这是可能的事吗?
我可以使用以下方法创建布尔掩码:
mask = df['STUSPS'] == 'AK'
Run Code Online (Sandbox Code Playgroud)
单独获取该状态的多边形;然而,我现在有点困惑如何移动它/重新定位它。
编辑 2:由于每个状态都由 dtype 表示geometry,我是否可以对多边形中的每个点应用变换?对于阿拉斯加,几何列显示:
27 MULTIPOLYGON (((179.48246 51.98283, 179.48656 ...
Name: geometry, dtype: geometry
Run Code Online (Sandbox Code Playgroud)
是否可以说将此列表中的每个数字乘以相同的常数即可完成此操作?
我想将阿拉斯加放在该地区周围的左下角,(-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 …Run Code Online (Sandbox Code Playgroud) 以下代码创建了美国大陆各州的地图,该地图由人口密度着色。我想创建一个类似的地图(我的数据实际上不是人口密度,但这是一个简单的例子),除了它还包括阿拉斯加州和夏威夷州。
具体来说,我希望阿拉斯加/夏威夷出现在图中,但要移动到显示美国大陆的图部分下方。或类似的规定。
知道如何使用 Cartopy 创建这样的地图吗?
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], projection=ccrs.LambertConformal())
ax.set_extent([-125, -66.5, 20, 50], ccrs.Geodetic())
shapename = 'admin_1_states_provinces_lakes_shp'
states_shp = shpreader.natural_earth(resolution='110m',
category='cultural', name=shapename)
popdensity = {
'New Jersey': 438.00,
'Rhode Island': 387.35,
'Massachusetts': 312.68,
'Connecticut': 271.40,
'Maryland': 209.23,
'New York': 155.18,
'Delaware': 154.87,
'Florida': 114.43,
'Ohio': 107.05,
'Pennsylvania': 105.80,
'Illinois': 86.27,
'California': 83.85,
'Virginia': 69.03,
'Michigan': 67.55,
'Indiana': 65.46,
'North Carolina': 63.80,
'Georgia': …Run Code Online (Sandbox Code Playgroud)