【问题标题】:Add geom_hline legend to existing geom bar legend将 geom_hline 图例添加到现有的几何条图例
【发布时间】:2015-07-21 18:19:30
【问题描述】:

我想在表示虚线的现有图例下添加一个图例,以便将虚线标记为“avg tx effect”并置于研究 3 之下。

library(ggplot2)
library(ggthemes)

#dput(df)

df=structure(list(study = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("study1", "study2", 
"study3"), class = "factor"), d = c(-0.205, 0.1075, 0.3525, -0.37, 
0.3, 0.42, -0.28, 0.09, 0.59, 0.11, -0.05, 0.25, 0, 0.25, 0.49
), Outcome = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 
5L, 5L, 5L), Outcome2 = structure(c(1L, 1L, 1L, 4L, 4L, 4L, 7L, 
7L, 7L, 10L, 10L, 10L, 13L, 13L, 13L), .Label = c("1", "1", "1", 
"2", "2", "2", "3", "3", "3", "4", "4", "4", "5", "5", "5"), class = "factor")), .Names = c("study", 
"d", "Outcome", "Outcome2"), row.names = c(NA, -15L), class = "data.frame")

ggplot(df, aes(x=Outcome2, y=d, fill=study)) + 
   geom_bar(position=position_dodge(), aes(x=Outcome2),stat="identity",
             colour="black", # Use black outlines,
             size=.3) +      # Thinner lines
    xlab("Outcome") +
    ylab("Cohen's D Effect Size") +
    scale_fill_grey(name="Study", 
                   labels=c("study1","study2", "study3"))+
        theme_bw()+
    geom_hline(yintercept=.15,linetype=2)   

【问题讨论】:

  • 情节上的直接文本标签会很容易......

标签: r ggplot2 legend


【解决方案1】:

ggplot 的一般特性是,要生成图例,您需要将您的 aesthetics(例如 linetype映射到数据中的变量,而不是 设置它为常数。在geom_hline 的情况下,这可以通过将截距放在单独的数据帧中来实现。另请注意show_guide = TRUE

然后使用scale_linetype_manual 自定义图例。 fill 图例中的黑线使用override.aes 删除。

这是您的代码的精简版本,仅显示最必要的步骤:

df2 <- data.frame(yi = 0.15)

ggplot(data = df, aes(x = Outcome2, y = d, fill = study)) + 
  geom_bar(position = "dodge", stat = "identity") +
  geom_hline(data = df2, aes(yintercept = yi, linetype = factor(yi)), show_guide = TRUE) +
  scale_linetype_manual(name = "avg tx effect", values = "dashed", labels = "") +
  guides(fill = guide_legend(override.aes = list(linetype = "blank")))

【讨论】:

    【解决方案2】:

    正如@Gregor 建议的那样,您可以通过添加annotate() 为该行使用直接标签,如下所示:

    ggplot(df, aes(x=Outcome2, y=d, fill=study)) + 
       geom_bar(position=position_dodge(), aes(x=Outcome2),stat="identity",
                 colour="black", # Use black outlines,
                 size=.3) +      # Thinner lines
        xlab("Outcome") +
        ylab("Cohen's D Effect Size") +
        scale_fill_grey(name="Study", 
                       labels=c("study1","study2", "study3"))+
            theme_bw()+
        geom_hline(yintercept=.15,linetype=2) +annotate("text",x=.7,y=.17,size=3,label=c('avg tx ef')) 
    

    如果空间是一个问题,您可以使用wrapper 描述的here 来换行文本。只需运行wrapper &lt;- function(x, ...) paste(strwrap(x, ...), collapse = "\n"),然后添加+annotate("text",x=.7,y=.18,size=3,label=wrapper('avg tx effect',10))。产生:

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 2014-01-21
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多