【问题标题】:Getting contextily basemap to fill plots获取上下文底图以填充绘图
【发布时间】:2020-08-28 09:51:41
【问题描述】:

我正在尝试使用以下内容创建一个 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()

出现的问题是子图中的底图范围仅限于叠加点数据。如何更改它,以便每个子图都有一个覆盖整个子图的底图。

【问题讨论】:

  • 首先设置斧头限制(使用 set_aspect)可能会有所帮助,然后才调用add_basemap(因为这只会在被调用时获取ax 的当前范围所需的那些图块)
  • 我已经尝试在设置方面后订购 add_basemap 并且它不会改变问题。
  • 你能提供一个可重现的例子吗? (例如,如果您无法共享数据,则使用一些半随机点)

标签: python geopandas contextily


【解决方案1】:

我的解决方案是,我搜索了最外层的点,然后用

更改了我的 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

亲切的问候

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多