【问题标题】:Adding a different rectangle to each facet in ggplot向ggplot中的每个方面添加不同的矩形
【发布时间】:2021-04-12 14:52:10
【问题描述】:

我有一个数据框,我想在 4 个方面(按 ID)呈现,并且对于每个方面,用一个矩形突出显示数据。

我的数据是:

dt<-data.frame(ID=c(rep(c("1","2","3","4"),2)),var=c(480,1180,170,130,500,1180,1450,750),
                 Method=c(rep(c("A","B"),each=4)))

我能找到的所有其他相关帖子都参考了创建一个新数据框,其中每个矩形的信息作为单独的行。因此,我创建了以下数据框:

rect<-data.frame(xmin = c(0.8, 0.8,0.8,0.8), xmax = c(2.2, 2.2, 2.2, 2.2), 
           ymin = c(430, 1130, 120, 80), ymax = c(550, 1230, 1500, 800), 
           alpha = c(.1, .1, .1, .1),
           fill = c("red", "green","orange","blue"))

我的ggplot代码是:

ggplot(dt,aes(x=Method,y=var)) +
  geom_point() +
  annotate("rect", xmin = rect$xmin, xmax = rect$xmax, ymin = rect$ymin, ymax = rect$ymax,
           alpha = 0.1, fill = "green")+
  facet_wrap(~ID,ncol=4)+
  theme_bw()

这给了我以下信息:

geom_rect 选项根本不适合我。我只是收到有关缺少变量的错误消息。我在 rect 数据框中添加了一个 ID 和 Method 列,但这只是引发了 var 变量不存在的问题。我考虑过将它们全部合并,但我不确定这是否能解决问题。这是我尝试使用 geom_rect 的方法

geom_rect(data=rect, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
          alpha = 0.1,fill = "blue")+

根据 rect 数据框,我想要的只是每个方面的一个矩形。并非每个数据帧上的所有内容。现在忽略颜色,如果它们都是绿色或蓝色就可以了。

提前感谢您的帮助。

【问题讨论】:

    标签: r ggplot2 facet annotate geom


    【解决方案1】:

    我认为annotate() 方法不允许方面特异性,所以geom_rect() 可能是要走的路。您需要做的两件事是 (1) 设置 inherit.aes = FALSE 或将全局 aes() 更改为 geom_point() 层和 (2) 将构面信息添加到 rect data.frame。

    library(ggplot2)
    
    dt<-data.frame(ID=c(rep(c("1","2","3","4"),2)),var=c(480,1180,170,130,500,1180,1450,750),
                   Method=c(rep(c("A","B"),each=4)))
    
    rect<-data.frame(xmin = c(0.8, 0.8,0.8,0.8), xmax = c(2.2, 2.2, 2.2, 2.2), 
                     ymin = c(430, 1130, 120, 80), ymax = c(550, 1230, 1500, 800), 
                     alpha = c(.1, .1, .1, .1),
                     fill = c("red", "green","orange","blue"))
    
    ggplot(dt,aes(x=Method,y=var)) +
      geom_point() +
      geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
                alpha = 0.1, fill = "green",
                data = transform(rect, ID = as.character(1:4)),
                inherit.aes = FALSE) +
      facet_wrap(~ID,ncol=4)+
      theme_bw()
    

    reprex package (v1.0.0) 于 2021-04-12 创建

    附带说明,如果您希望矩形逐字逐句地从您的 data.frame 中填充,您可以在矩形 aes() 中使用 fill = I(fill)(并删除 aes 之外的填充分配)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2017-07-11
      • 2021-10-02
      • 1970-01-01
      • 2020-05-25
      • 2019-06-12
      • 2018-02-22
      相关资源
      最近更新 更多