hvplot.quadmesh绘图保存为PNG时出现网格伪影渲染问题
问题说明
使用hvplot.quadmesh生成的可视化图表,在Jupyter Notebook内联渲染、导出为HTML文件时显示效果正常无伪影,但调用hvplot.save()导出为PNG格式文件时,会出现异常网格伪影。
复现代码
annual_mean_ch4_2020 = rxr.open_rasterio(annual_means_files[3]).to_dataset(dim='band', promote_attrs=True) plot = annual_mean_ch4_2020.hvplot.quadmesh('x', 'y', 'ch4', crs=epsg4326, geo=True, global_extent=False, frame_height=540, cmap='viridis', projection= ccrs.PlateCarree(), coastline=None, tiles='CartoLight', features = {'land': '10m', 'ocean' : '10m'}, clabel = 'TROPOMI XCH4 (ppb)', rasterize=False, grid=False, #xaxis=None, #yaxis=None, xlim = (-74, -10), line_alpha=0, line_width=0, hover_line_alpha=0) hvplot.save(plot, 'test_hvplot_map.png')
排查解决方法
- 校验静态导出依赖完整性:hvplot导出PNG依赖Bokeh的静态渲染能力,需要本地安装匹配版本的
selenium、浏览器驱动(geckodriver/ChromeDriver)、pillow,可通过conda-forge源重装整套依赖解决版本兼容问题,执行命令:conda install -c conda-forge selenium geckodriver pillow firefox - 显式禁用quadmesh单元描边:浏览器端渲染可以正确识别
line_alpha=0、line_width=0的透明描边配置,但静态导出后端对0值参数的解析存在差异,会渲染出错位的细描边形成网格伪影,在quadmesh参数中新增line_color=None即可完全关闭单元描边,消除这类伪影。 - 启用datashader栅格化渲染:将代码中
rasterize=False修改为rasterize=True,渲染阶段直接生成像素对齐的栅格图层,从根源避免矢量面片导出时的边缘错位问题,同时能提升大栅格数据的渲染导出效率。 - 调整导出参数避免抗锯齿错位:调用
hvplot.save()时新增scale=2参数,提升导出时的渲染缩放比例,避免默认缩放下矢量面片边缘的抗锯齿计算错位,同时可以提升PNG的导出清晰度。 - 排查多图层叠加冲突:代码中同时叠加了CartoLight底图、10m分辨率陆地/海洋要素层,静态导出时多图层渲染顺序异常也可能导致伪影,可先注释
tiles、features参数测试基础quadmesh图层导出是否正常,再逐层添加要素确认冲突来源,通过调整图层zorder参数指定渲染顺序即可解决。
内容的提问来源于stack exchange,提问作者bmdsy94
相关产品推荐
相关产品推荐

