Rmarkdown生成HTML文档时并排展示图片如何保持宽高一致
解决方案
- 方案1:强制统一tmap布局参数与导出设置
所有地图生成时固定布局、边距、宽高比,导出时固定dpi:
# 每张地图生成时统一添加如下布局参数,强制锁死宽高比与边距 X1.map <- X1.map + tm_layout( asp = 0.375, # 对应你设置的width/height=1.5/4,固定宽高比 inner.margins = c(0.02, 0.02, 0.02, 0.02), # 统一内边距,避免不同内容自动调整 outer.margins = 0, # 统一外边距 legend.position = c("right", "bottom"), # 统一图例位置,可根据需求调整 legend.text.size = 0.8, legend.title.size = 1 # 统一图例文字大小 ) # 导出时统一添加dpi参数,固定像素尺寸 tmap_save(X1.map, "plots/X1.map.png", height = 4, width = 1.5, dpi = 300)
所有地图都按照上述规则生成、导出后再导入R Markdown即可。
- 方案2:通过HTML CSS强制统一图片显示尺寸
直接在R Markdown的图片引入chunk中添加CSS规则,强制所有图片高度一致且不变形:
{r maps, fig.cap = "Fig. Z - Maps", fig.show="hold", out.width="25%", fig.align = "center", echo = FALSE, out.extra='style="height: 400px; object-fit: contain; margin: 0 5px;"'} knitr::include_graphics("plots/X1.map.png") knitr::include_graphics("plots/X2.map.png") knitr::include_graphics("plots/X3.map.png") knitr::include_graphics("plots/X4.map.png")
其中height:400px可根据你的展示需求调整数值,object-fit: contain会保证图片按原始比例缩放,不会出现拉伸变形。
- 方案3:直接在R Markdown中渲染tmap对象(优先推荐)
省去先导出本地png再导入的步骤,直接在chunk内绘制tmap对象,由knitr统一控制输出尺寸,完全避免导出环节的尺寸差异:
{r maps, fig.cap = "Fig. Z - Maps", fig.show="hold", fig.width=1.5, fig.height=4, out.width="25%", fig.align = "center", echo = FALSE} # 直接写四个tmap对象即可,不需要用include_graphics导入 X1.map X2.map X3.map X4.map
该方案不需要预先导出图片,所有输出参数统一由knitr控制,一致性最高。
内容的提问来源于stack exchange,提问作者Drew
相关产品推荐
相关产品推荐

