GeoViews:使用 matplotlib 后端添加平铺底图

Posted

技术标签:

【中文标题】GeoViews:使用 matplotlib 后端添加平铺底图【英文标题】:GeoViews: adding a tile basemap using matplotlib backend 【发布时间】:2021-10-05 17:46:16 【问题描述】:

使用matplotlib 后端,是否可以向GeoViewsplot 添加图块底图(例如 OSM),例如以某种方式调用contextily?使用Bokeh 后端,这是通过gv.tile_sources 完成的,然后将其添加到覆盖中,但是mpl 后端是否有类似的功能?

回答后编辑

添加一个可重现的示例,假设一个在后端之间切换,并在 EPSG:4326 中使用邻域级多边形 gdf。

最初让我认为不可能添加底图的原因是 (1) 没有定义 WMTS 缩放级别(导致绘制无法辨认的像素化文本而不是特征),并且在阅读了 James 的回答后,(2) 添加了瓦片层到布局的最后,而不是第一个,这导致瓦片覆盖多边形层(在散景后端不是问题,但显然使用 matplotlib 确实很重要)。

import geoviews as gv
from geoviews import opts
from cartopy import crs as ccrs

gv.extension('bokeh', 'matplotlib')

tiles = gv.tile_sources.OSM()

layout = tiles * gv.Polygons(gdf1, group="group1") * gv.Polygons(gdf2, group="group2")

layout.opts(
            opts.Polygons('group1', cmap=['red'], backend="matplotlib"),
            opts.Polygons('group2', cmap=['lightgrey'], backend="matplotlib"),
            opts.Overlay(backend='matplotlib'),
            opts.WMTS(zoom=13, backend='matplotlib'),
            projection=ccrs.Mercator()
        )
        
gv.output(layout, size=500, fig='svg', backend='matplotlib')

【问题讨论】:

【参考方案1】:

当然,same as for Bokeh:

import geoviews as gv
from geoviews import opts, tile_sources as gvts
gv.extension('matplotlib')

opts.defaults(
    opts.Layout(sublabel_format='', vspace=0.1, hspace=0.1, fig_size=200),
    opts.WMTS(zoom=0))

(gvts.Wikipedia + gvts.StamenToner + gvts.EsriNatGeo + gvts.EsriImagery +
 gvts.EsriUSATopo + gvts.EsriTerrain + gvts.EsriReference + gvts.StamenTerrain).cols(4)

【讨论】:

干杯,詹姆斯!那是我的错。在我弄清楚为什么它最初对我不起作用后,我添加了一个可重现的示例,这要感谢您将我指向该示例(我不知何故错过了)。如果你有时间,你介意看看我在last week 和a month ago 提出的两个相关的gv+mpl 问题吗?非常感谢!

以上是关于GeoViews:使用 matplotlib 后端添加平铺底图的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Colaboratory Notebook 上安装 GeoViews

Geoviews 错误:“提供的数据不包含指定的维度”

geoviews数据集在覆盖holoviews瓦片源时,将latlon转换为小数。

如何在 matplotlib / Python 中更改后端

matplotlib中什么是后端

当我在 jupyter notebook 中使用 matplotlib 时,它总是引发“matplotlib 当前正在使用非 GUI 后端”错误?