【发布时间】:2020-01-30 16:52:06
【问题描述】:
问题:有没有办法从geodataframe 重新采样网格值以绘制更平滑的地图?
详情:
我正在使用一个名为 gdf 的 24x24 网格。网格的每个cell 都有一个value 和一个id 作为属性:
#gdf.head()
id values geometry
0 1 52.390119 POLYGON ((653179.710 6859158.392, 653179.710 6...
1 2 52.390119 POLYGON ((653179.710 6858908.392, 653179.710 6...
2 3 52.390119 POLYGON ((653179.710 6858658.392, 653179.710 6...
3 4 49.592331 POLYGON ((653179.710 6858408.392, 653429.710 6...
4 5 52.390119 POLYGON ((653429.710 6858408.392, 653179.710 6...
这是我绘制时得到的地图类型:
如您所见,图中从一个单元格到另一个单元格的值发生了非常剧烈的变化,我想让它变得更平滑。
有没有办法将每个单元格分成 2 个或 3 个子单元格(水平和垂直)以获得更高分辨率的网格,然后插入这些值以获得平滑的渐变而不是这个? 知道我正在尝试将数据保留为 geodataframe,因为稍后我需要将它们转换为 shapefile。
我找到了一种方法,可以让我通过plt.imshow() 进行操作,因为有一个interpolation 选项;这将给我我想要的东西,但这只会给出一个图像作为输出,我不能直接用它修改gdf:
grid = np.array(file.data).reshape(-1, 24)[::-1]
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(20, 20), subplot_kw={'xticks': [], 'yticks': []})
for ax, interp_method in zip(axs.flat, methods):
ax.imshow(grid, interpolation='lanczos', cmap='RdYlGn_r')
plt.tight_layout()
plt.show()
【问题讨论】:
-
不一样吗?他们在该帖子中考虑了插值的散点,而我对数据进行了网格化,中间没有缺失值。
-
这样吧。您可以将网格值表示为数组。您可以将您的数组“膨胀”到给定的比率以具有缺失值(您的已知值现在分散),然后您将尝试使用这篇文章的答案进行估算
-
我明白了,我会试试的。如果我将地理数据框转换为数组(尤其是
geometry信息),我不会丢失信息吗?我不习惯使用它们,所以我有点不确定。 -
geometry是否代表单元格的多边形?如果是,因为您有一个方形网格,所以它几乎是多余的信息,因为您可以仅使用地图的最小/最大坐标重新计算这些值。因此,使用插值的二维浮点数组,您也可以使用polygons列创建一个新的地理数据框
标签: python interpolation geopandas