ggplot中使用annotation_custom添加图片时如何保留宽高比?
保留ggplot中添加图片的宽高比
要在ggplot中添加图片并维持原始宽高比,你可以通过以下两种方法实现:
方法一:结合annotation_custom()与rasterGrob()精准控制
先提取图片的原始宽高比,再以此为基准设定图片的显示范围,并锁定坐标轴比例:
library(ggplot2) library(png) library(grid) # 读取目标图片 my_image <- readPNG("Rlogo.png") # 将图片转为grob对象 img_grob <- rasterGrob(my_image) # 计算图片原始宽高比(宽度/高度) img_ratio <- ncol(my_image)/nrow(my_image) # 构建绘图并添加图片 ggplot() + theme_void() + # 按宽高比设定图片的显示范围 annotation_custom(img_grob, xmin = 0, xmax = 1, ymin = 0, ymax = 1/img_ratio) + # 锁定坐标轴比例,强制匹配图片宽高比 coord_fixed(ratio = img_ratio)
方法二:基于annotation_raster()配合坐标轴比例锁定
如果偏好使用annotation_raster(),同样可以通过宽高比匹配坐标轴的方式避免拉伸:
library(ggplot2) library(png) my_image <- readPNG("Rlogo.png", native = TRUE) # 计算图片原始宽高比 img_ratio <- ncol(my_image)/nrow(my_image) ggplot() + theme_void() + # 按宽高比设定图片的显示范围 annotation_raster(my_image, xmin=0, ymin=0, xmax=1, ymax=1/img_ratio) + # 锁定坐标轴比例,确保图片不会变形 coord_fixed(ratio = img_ratio)
核心逻辑是:先获取图片的原始宽高比,再通过coord_fixed()强制绘图区域的坐标轴比例与图片一致,同时让图片的显示范围匹配该比例,这样无论调整绘图窗口大小,图片都能保持原有比例,不会被拉伸或压缩。
内容的提问来源于stack exchange,提问作者NicolasBourbaki
相关产品推荐
相关产品推荐

