You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Quarto中仅在HTML输出显示mapview绘图并兼容多格式导出

解决mapview绘图在非HTML格式(docx/PDF)下的编译问题

mapview生成的是交互式HTML地图,直接在docx/PDF输出中会因HTML代码无法解析报错,核心解决方案是根据输出格式条件渲染:HTML保留交互地图,非HTML格式转为静态图片输出。以下是两种可行实现方式:

方法一:使用mapshot()转换为静态图片

利用mapview自带的mapshot()函数将交互地图导出为PNG图片,在非HTML输出时插入静态图片:

library(mapview)
library(knitr)

# 加载示例数据(替换为你的数据)
data(breweries)

# 条件判断输出格式
if (knitr::is_html_output()) {
  # HTML输出:展示交互式mapview地图
  mapview(breweries, zcol = "brewery_type")
} else {
  # 非HTML输出:生成静态图片并插入报告
  # 先导出图片到本地
  mapshot(
    mapview(breweries, zcol = "brewery_type"),
    file = "brewery_map.png",
    vwidth = 800, vheight = 600 # 调整图片尺寸
  )
  # 插入图片到报告
  knitr::include_graphics("brewery_map.png")
}

注意事项

  • 需提前安装webshot2包(install.packages("webshot2")),mapshot()依赖它生成静态图片。
  • 可通过代码块选项fig.width/fig.height进一步调整图片在报告中的显示尺寸。

方法二:使用tmap包适配多格式输出

tmap支持一键切换交互式(适配HTML)和静态(适配docx/PDF)模式,代码更简洁:

library(tmap)

# 加载示例数据
data(breweries)

# 根据输出格式自动切换tmap模式
tmap_mode(ifelse(knitr::is_html_output(), "view", "plot"))

# 绘制地图(语法类似ggplot2)
tm_shape(breweries) +
  tm_dots(col = "brewery_type", size = 0.5) +
  tm_layout(title = "Brewery Distribution")

优势

  • 无需手动处理图片导出,tmap会自动根据输出格式生成对应类型的地图。
  • 静态模式下支持更多自定义样式,适配PDF/docx的排版需求。

全局配置优化

可在.qmd开头的代码块中全局设置条件渲染逻辑,避免重复判断:

library(mapview)
library(tmap)
library(knitr)

# 全局设置tmap模式
tmap_mode(ifelse(is_html_output(), "view", "plot"))

# 自定义mapview静态导出函数
mapview_static <- function(map_obj, filename = "map_output.png") {
  mapshot(map_obj, file = filename)
  include_graphics(filename)
}

之后在需要绘图的地方,只需根据格式调用对应函数即可。

内容的提问来源于stack exchange,提问作者Tiago Marques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:12:34