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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:03