python - GeoViews:使用 matplotlib 后端添加平铺底图
问题描述
使用matplotlib
后端,是否可以将诸如 OSM 之类的图块底图添加到GeoViews
绘图中,例如通过某种方式调用contextily
?使用Bokeh
后端,这是通过gv.tile_sources
然后将其添加到叠加层来完成的,但是mpl
后端是否有类似的功能?
回复后编辑
添加一个可重现的示例,假设一个在后端之间切换,并在 EPSG:4326 中使用邻域级多边形 gdfs。
最初让我认为不可能添加底图的原因是(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')
解决方案
当然,与 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)
推荐阅读
- node.js - 如何在 Node.js 中修复此回调错误?
- tensorflow - Tensorflow 导出计算图的方法有什么区别?
- c# - 从 MVC 操作返回数据和文件
- system-verilog - 检查 SVA 过去发生的事件的最佳方法是什么?
- javascript - npm start 后如何解决导入错误
- reactjs - 如何使用 Base64UploadAdapter 在 React 中将图像粘贴到 CKEditor5
- javascript - 无法在本地文件中加载任何 iframe?
- sql - SQL Query 通过对另一列进行分组来获取基于一列的最高值
- xml - 如何按属性值提取/更新 Oracle 12g XML 中的属性值
- import - 我收到一条错误消息“无法从安装了 Beautiful Soup 的 Mac 上运行 python3 的 'urllib' 导入 'urlopen'