【问题标题】:How to place multiple pngs on a plot in R?如何在R中的一个图上放置多个png?
【发布时间】:2022-03-03 10:47:04
【问题描述】:

herehere 提出了类似的问题。但是,它们并不能完全解决我的问题。

我正在尝试绘制热图。但是然后在热图的每个图块上,我想放置一个 png。到目前为止,这是我的代码:

library(ggplot2)
library(png)
library(grid)

# get png
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)

# create heatmap
x <- LETTERS[1:5]
y <- paste0("var", seq(1,5))
data <- expand.grid(X=x, Y=y)
data$Z <- runif(25, 0, 5)

# Heatmap 
p <- ggplot(data, aes(X, Y, fill= Z)) + 
  geom_tile() + 
  theme(aspect.ratio = 1)

# place png
p +
  annotation_custom(g, xmin = 0.5, xmax = 1.5, ymin = 0.5, ymax = 1.5)

上面的代码绘制了这个:

但我想要做的是将 png 放在每个图块上,然后热图。现在,我可以像这样检索每个图块的坐标:

b <- ggplot_build(p)
b$data[[1]]$xmin
b$data[[1]]$xmax
b$data[[1]]$ymin
b$data[[1]]$ymax

但我不知道如何在每个图块上放置 png。我希望不必为每个图块都有一个annotation_custom 参数。我正在尝试使流程自动化。

有什么办法可以做到吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    你可以循环添加注释

    xmin = b$data[[1]]$xmin
    xmax = b$data[[1]]$xmax
    ymin = b$data[[1]]$ymin
    ymax = b$data[[1]]$ymax
    
    for (i in seq_len(nrow(data))) {
      p = p + annotation_custom(g, xmin = xmin[i], xmax = xmax[i], 
                                   ymin = ymin[i], ymax = ymax[i])
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 2021-11-04
      • 2016-03-26
      • 2019-12-12
      • 2015-08-29
      相关资源
      最近更新 更多