获取上下文底图以填充地块
Getting contextily basemap to fill plots
我正在尝试使用以下方法创建 2x2 子图:
import geopandas as gpd
import matplotlib.pyplot as plt
import contextily as ctx
site = gdf.groupby('Site_name')
plt.figure(figsize =(20,20))
# Iterate through sites
for i, (Site_name, site_gdf) in enumerate(site):
# create subplot axes in a 2x2 grid
ax = plt.subplot(2, 2, i + 1) # nrows, ncols, axes position
# plot the site on these axes
site_gdf.plot(ax=ax)
ctx.add_basemap(ax, source=ctx.providers.Esri.WorldImagery)
# set the title
ax.set_title(Site_name)
# set the aspect
# adjustable datalim ensure that the plots have the same axes size
ax.set_aspect('equal', adjustable='datalim')
plt.tight_layout()
plt.show()
出现问题是子图中的底图范围仅限于叠加的点数据。我该如何更改它,以便每个子图都有一个覆盖整个子图的底图。
我的解决方案是,我搜索了最外层的点,然后用
更改了我的 matplotlib 轴
ax.set_xlim(x_min-addition, x_max+addition)
ax.set_ylim(y_min-addition, y_max+addition)
在这种情况下,加法只是增加对点数的看法,例如 0.001。 x_min 是最小的点,x_max 是最大的点,依此类推...之后,我得到了我的底图。
ctx.add_basemap(ax,...)
如果您知道所有点的最外层边界,则可以直接通过它们。结果应该是相同的大小。如果您不知道自己的界限,则需要先找到它们。
因此你可以迭代你的观点并比较它们(只是一个例子):
for point_data_x, point_data_y in site_data:
if point_data_x < x_min:
x_min = point_data_x
elif point_data_x > x_max:
x_max = point_data_x
if point_data_y < y_min:
y_min = point_data_y
elif point_data_y > y_max:
y_max = point_data_y
亲切的问候
我正在尝试使用以下方法创建 2x2 子图:
import geopandas as gpd
import matplotlib.pyplot as plt
import contextily as ctx
site = gdf.groupby('Site_name')
plt.figure(figsize =(20,20))
# Iterate through sites
for i, (Site_name, site_gdf) in enumerate(site):
# create subplot axes in a 2x2 grid
ax = plt.subplot(2, 2, i + 1) # nrows, ncols, axes position
# plot the site on these axes
site_gdf.plot(ax=ax)
ctx.add_basemap(ax, source=ctx.providers.Esri.WorldImagery)
# set the title
ax.set_title(Site_name)
# set the aspect
# adjustable datalim ensure that the plots have the same axes size
ax.set_aspect('equal', adjustable='datalim')
plt.tight_layout()
plt.show()
出现问题是子图中的底图范围仅限于叠加的点数据。我该如何更改它,以便每个子图都有一个覆盖整个子图的底图。
我的解决方案是,我搜索了最外层的点,然后用
更改了我的 matplotlib 轴ax.set_xlim(x_min-addition, x_max+addition)
ax.set_ylim(y_min-addition, y_max+addition)
在这种情况下,加法只是增加对点数的看法,例如 0.001。 x_min 是最小的点,x_max 是最大的点,依此类推...之后,我得到了我的底图。
ctx.add_basemap(ax,...)
如果您知道所有点的最外层边界,则可以直接通过它们。结果应该是相同的大小。如果您不知道自己的界限,则需要先找到它们。 因此你可以迭代你的观点并比较它们(只是一个例子):
for point_data_x, point_data_y in site_data:
if point_data_x < x_min:
x_min = point_data_x
elif point_data_x > x_max:
x_max = point_data_x
if point_data_y < y_min:
y_min = point_data_y
elif point_data_y > y_max:
y_max = point_data_y
亲切的问候