【问题标题】:Grob arguments from a data.frame to ggplot2从 data.frame 到 ggplot2 的 Grob 参数
【发布时间】:2018-09-26 07:39:53
【问题描述】:

如何将一组 grobs(ximin、xmax、ymin、ymax)的参数从 data.frame 传递给 annotation_custom 函数 (ggplot2)。下面的例子说明了这个问题。

# Grobs
a <- ggplot(diamonds, aes(carat)) + geom_histogram(fill = "red") + theme_void()
g1 <- ggplotGrob(a)
b <- ggplot(diamonds, aes(carat)) + geom_histogram(fill = "blue") + theme_void()
g2 <- ggplotGrob(b)

# Structure of the arguments location
my.data <- data.frame(grob = c("g1", "g2"), xmin = c(1.5, 5.5), xmax = c(4.5, 8), 
                  ymin = c(2.5, 4), ymax = c(6, 8))

# Desired result
df <- data.frame(x = 1:10, y = 1:10)
ggplot(df, aes(x, y)) + geom_blank() + theme_bw() +
annotation_custom(g1, xmin = 1.5, xmax = 4.5, ymin = 2.5, ymax = 6) +
annotation_custom(g2, xmin = 5.5, xmax = 8, ymin = 4, ymax = 8)

【问题讨论】:

    标签: r dataframe ggplot2 arguments grob


    【解决方案1】:

    geom_custom() 会更自然,但同时您可以创建图层列表,

    my.data <- data.frame(xmin = c(1.5, 5.5), xmax = c(4.5, 8), 
                          ymin = c(2.5, 4), ymax = c(6, 8))
    my.data$grob <- list(g1,g2)
    get_grob <- function(grob, xmin, xmax, ymin, ymax){
      annotation_custom(grob=grob[[1]], xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax)
    }
    df <- data.frame(x = 1:10, y = 1:10)
    ggplot(df, aes(x, y)) + geom_blank() + theme_bw() +
      plyr::mlply(my.data, get_grob)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 2018-05-25
      相关资源
      最近更新 更多