R 在绘图图例中添加文字,而不参考绘图中的线条

R 在绘图图例中添加文字,而不参考绘图中的线条,r,ggplot2,R,Ggplot2,我有一个两行的绘图,其中图例条目非常相似,除了一些单词(见下文) 我的代码如下所示: library(tidyverse) set.seed(36) Data <- data.frame( date = sample((as.Date(as.Date("2011-12-30"):as.Date("2012-01-04"), origin="1970-01-01")), 1000, replace = TRUE), group =

我有一个两行的绘图,其中图例条目非常相似,除了一些单词(见下文)

我的代码如下所示:

library(tidyverse)

set.seed(36)
Data <- data.frame(
  date = sample((as.Date(as.Date("2011-12-30"):as.Date("2012-01-04"),
                         origin="1970-01-01")), 1000, replace = TRUE),
  group = sample(c("0", "1"), 1000, replace = TRUE),
  outcome = sample(c("0", "1"), 1000, replace = TRUE))
Data %>%
  mutate(date = as.POSIXct(date), group = factor(group)) %>%
  group_by(group, date) %>% #group
  summarise(prop = sum(outcome == "1")/n()) %>% #calculate proportion 
  ggplot()+
  geom_line(aes(x = date, y = prop, color = group))+
  geom_point(aes(x = date, y = prop, color = group)) +
  scale_color_manual(values = c("0" = "blue", "1" = "black"), labels = c("0" = 'Some text that repeats, the only unique thing being "A"', "1" = 'Some text that repeats, the only unique thing being "B"'), name = "Legend")
库(tidyverse)
种子(36)
数据%
突变(日期=as.POSIXct(日期),组=因子(组))%>%
分组依据(分组,日期)%>%\u分组
总结(prop=sum(outcome==“1”)/n())%>%#计算比例
ggplot()+
geom_线(aes(x=日期,y=道具,颜色=组))+
几何点(aes(x=日期,y=道具,颜色=组))+
缩放颜色手册(值=c(“0”=“蓝色”、“1”=“黑色”)、标签=c(“0”=”一些重复的文本,唯一唯一唯一的是“A”)、“1”=”一些重复的文本,唯一唯一唯一唯一的是“B”)、名称=“图例”)
它生成以下图形:

我想简化这个传说。它应包含以下行:

  • 标题(
    图例
  • 一个没有任何彩色线条的文本(
    一些重复的文本,唯一唯一的是
    ),然后是带有
  • 带有文本
    A
  • 带有文本
    B
    的黑线
  • 即,所需的输出如下所示:

    我如何才能做到这一点?

    这里有一个建议:

    scale_color_manual(values = c("0" = "blue", "1" = "black"), 
                       labels = c("0" = '"A"', "1" = '"B"'), 
                       name = "Legend\nSome text that repeats,\nthe only unique thing being")
    
    但我会删除
    “Legend”
    (信息量不大)

    要明确区分
    “图例”
    和字幕文本,可以使用
    表达式和
    顶部的
    加粗:

    legend_title = expression(atop(bold("Legend\n"),
                             "Some text that repeats,\nthe only unique thing being"))
    
    Data %>%
      mutate(date = as.POSIXct(date), group = factor(group)) %>%
      group_by(group, date) %>% #group
      summarise(prop = sum(outcome == "1")/n()) %>% #calculate proportion 
      ggplot()+
      geom_line(aes(x = date, y = prop, color = group))+
      geom_point(aes(x = date, y = prop, color = group)) +
      scale_color_manual(values = c("0" = "blue", "1" = "black"), 
                         labels = c("0" = '"A"', "1" = '"B"'), 
                         name = legend_title)
    

    然后,您可以在
    “图例”
    之后添加空格,使其向左对齐:

    legend_title = expression(atop(bold("Legend                             \n"),
                             "Some text that repeats,\nthe only unique thing being"))
    
    这里有一个建议:

    scale_color_manual(values = c("0" = "blue", "1" = "black"), 
                       labels = c("0" = '"A"', "1" = '"B"'), 
                       name = "Legend\nSome text that repeats,\nthe only unique thing being")
    
    但我会删除
    “Legend”
    (信息量不大)

    要明确区分
    “图例”
    和字幕文本,可以使用
    表达式和
    顶部的
    加粗:

    legend_title = expression(atop(bold("Legend\n"),
                             "Some text that repeats,\nthe only unique thing being"))
    
    Data %>%
      mutate(date = as.POSIXct(date), group = factor(group)) %>%
      group_by(group, date) %>% #group
      summarise(prop = sum(outcome == "1")/n()) %>% #calculate proportion 
      ggplot()+
      geom_line(aes(x = date, y = prop, color = group))+
      geom_point(aes(x = date, y = prop, color = group)) +
      scale_color_manual(values = c("0" = "blue", "1" = "black"), 
                         labels = c("0" = '"A"', "1" = '"B"'), 
                         name = legend_title)
    

    然后,您可以在
    “图例”
    之后添加空格,使其向左对齐:

    legend_title = expression(atop(bold("Legend                             \n"),
                             "Some text that repeats,\nthe only unique thing being"))
    

    这里有一种方法只是稍微有点不成熟:使用
    fct\u expand
    forcats
    (包含在tidyverse中)中的
    fct\u releval将虚拟级别添加到您的
    变量中,然后使用
    fct\u releval
    使其成为因子中的第一级。这样,您就有了一个虚假的观察结果,它将列在图例的顶部,但实际上没有任何数据

    除了添加该行之外,我唯一更改的是色标中的
    drop=F
    ,因此即使没有与虚拟级别相关的数据,它仍将显示在图例中,然后显示在图例标签中

    一个缺点是虚拟变量的图例键可见;可能有一些方法可以消除这种情况,或者您可以通过为图例键提供白色背景来降低其可视性

    库(tidyverse)
    种子(36)
    数据%
    突变(日期=as.POSIXct(日期),组=因子(组))%>%
    #添加虚拟因子级别并使其成为第一个级别
    变异(组=组%>%fct\u扩展(“虚拟”)%%>%fct\u重新级别(“虚拟”))%%>%
    分组依据(分组,日期)%>%\u分组
    总结(prop=sum(outcome==“1”)/n())%>%#计算比例
    ggplot()+
    geom_线(aes(x=日期,y=道具,颜色=组))+
    几何点(aes(x=日期,y=道具,颜色=组))+
    缩放颜色手册(值=c(“0”=“蓝色”、“1”=“黑色”、“虚拟”=“透明”)、标签=c(“0”=“A”、“1”=“B”、“虚拟”=“一些重复的文本”\n唯一独特的东西是”)、name=“图例”、drop=F)
    


    由(v0.2.0)于2018-04-09创建。

    这里有一种方法只是稍微有点老套:使用
    fct_expand
    forcats
    (包含在tidyverse中)添加一个虚拟级别到
    变量,然后使用
    fct_relevel
    将其作为系数的第一级。这样,您就有了一个虚假的观察结果,它将列在图例的顶部,但实际上没有任何数据

    除了添加该行之外,我唯一更改的是色标中的
    drop=F
    ,因此即使没有与虚拟级别相关的数据,它仍将显示在图例中,然后显示在图例标签中

    一个缺点是虚拟变量的图例键可见;可能有一些方法可以消除这种情况,或者您可以通过为图例键提供白色背景来降低其可视性

    库(tidyverse)
    种子(36)
    数据%
    突变(日期=as.POSIXct(日期),组=因子(组))%>%
    #添加虚拟因子级别并使其成为第一个级别
    变异(组=组%>%fct\u扩展(“虚拟”)%%>%fct\u重新级别(“虚拟”))%%>%
    分组依据(分组,日期)%>%\u分组
    总结(prop=sum(outcome==“1”)/n())%>%#计算比例
    ggplot()+
    geom_线(aes(x=日期,y=道具,颜色=组))+
    几何点(aes(x=日期,y=道具,颜色=组))+
    缩放颜色手册(值=c(“0”=“蓝色”、“1”=“黑色”、“虚拟”=“透明”)、标签=c(“0”=“A”、“1”=“B”、“虚拟”=“一些重复的文本”\n唯一独特的东西是”)、name=“图例”、drop=F)
    


    由(v0.2.0)于2018-04-09创建。

    请添加所需的输出图像。向我们展示你的绘画技巧。我坚持认为这是paint.NET;)请参阅更新的问题。
    scale\u color\u手册(值=c(“0”=“蓝色”,“1”=“黑色”),标签=c(“0”=“A”,“1”=“B”),name=“一些重复的文本”)
    请添加所需的输出图像。向我们展示你的绘画技巧。我坚持认为这是paint.NET;)请参阅更新的问题。
    scale\u color\u手册(值=c(“0”=“蓝色”,“1”=“黑色”),标签=c(“0”=“A”,“1”=“B”),name=“一些重复的文本”)