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

从URL读取PNG并添加至patchwork绘图时遇'as_patch'方法错误

解决patchwork中inset_element添加URL图片报错的问题

问题根源

readPNG()读取URL图片后返回的是数组格式,但inset_element()要求输入是ggplot对象、patch对象或其他可转换为patch的对象,数组无法被识别,因此报错no applicable method for 'as_patch' applied to an object of class "c('array', 'double', 'numeric')"。

解决方案

需要先将PNG数组转换为grid图形对象,再包装成patchwork可识别的对象,以下两种方法都可行:

方法1:用wrap_elements()直接包装图形对象

library(tidyverse)
library(patchwork)
library(RCurl)
library(grid) # 加载grid包处理图形对象

dat <- data.frame(
  x = 1:10,
  y = 1:10
)

list_of_url_logos <- cfbfastR::cfbd_team_info() %>%
  select(school, logo)

my_url <- head(list_of_url_logos$logo, 1)

# 读取图片为数组
my_image <-  png::readPNG(getURLContent(my_url))

# 将数组转换为grid图形对象
img_grob <- rasterGrob(my_image, interpolate = TRUE)

# 创建基础绘图
p1 <- ggplot(dat, aes(x = x, y = y)) +
  geom_point()

p2 <- ggplot(dat, aes(x = x, y = y)) +
  geom_line()

# 用wrap_elements包装grob,再传入inset_element
p1 / p2 +
  inset_element(wrap_elements(img_grob), left = 0.6, bottom = 0.6, right = 1, top = 1, align_to = "full")

方法2:用ggplot+annotation_custom()创建空图

library(tidyverse)
library(patchwork)
library(RCurl)
library(grid)

dat <- data.frame(
  x = 1:10,
  y = 1:10
)

list_of_url_logos <- cfbfastR::cfbd_team_info() %>%
  select(school, logo)

my_url <- head(list_of_url_logos$logo, 1)

my_image <-  png::readPNG(getURLContent(my_url))
img_grob <- rasterGrob(my_image, interpolate = TRUE)

# 创建仅包含图片的空ggplot(去掉坐标轴等元素)
img_plot <- ggplot() +
  annotation_custom(img_grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) +
  theme_void()

p1 <- ggplot(dat, aes(x = x, y = y)) +
  geom_point()

p2 <- ggplot(dat, aes(x = x, y = y)) +
  geom_line()

# 传入inset_element
p1 / p2 +
  inset_element(img_plot, left = 0.6, bottom = 0.6, right = 1, top = 1, align_to = "full")

关键说明

  • rasterGrob():将PNG数组转换为grid图形对象,interpolate=TRUE参数可让图片缩放时更平滑。
  • wrap_elements():直接将grid图形对象转换为patchwork兼容的patch对象,无需额外创建ggplot。
  • theme_void():用于移除空ggplot的坐标轴、背景等冗余元素,避免影响主图布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:05:23