R 如何将以下功能添加到现有ggplot2图形中?

R 如何将以下功能添加到现有ggplot2图形中?,r,ggplot2,R,Ggplot2,我在RStudio中运行以下R代码 library(ggplot2) library(tidyverse) DF <- structure(list(Type = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Current", "SPLY"), class = "factor"), variable = struct

我在RStudio中运行以下R代码

library(ggplot2)
library(tidyverse)

DF <- structure(list(Type = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Current", "SPLY"), class = "factor"), 
                     variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L),
                    .Label = c("Wk 06 Jan 2020-12 Jan 2020", "Wk 13 Jan 2020-19 Jan 2020", "Wk 20 Jan 2020-26 Jan 2020", "Wk 27 Jan 2020-02 Feb 2020"), class = "factor"),
                    value = c(6212, 12195,5508, 10574,15060, 9763,5341, 9478)),
                    row.names = c(NA, -8L), .Names = c("Type", "variable", "value"), class = "data.frame")


diff_df = DF %>%
  group_by(variable) %>%
  spread(Type, value) %>%
  mutate(diff = Current - SPLY,
         max_y = max(Current, SPLY),
         sim_higher = Current > SPLY)

ggplot(DF, aes(variable, value)) +
  geom_bar(aes(y = max_y), data = diff_df, stat = "identity", fill = "grey80", width = 0.4) +
  geom_bar(aes(fill = Type), position = "dodge", stat="identity", width=.5) +
  geom_text(aes(label=value, group=Type), position=position_dodge(width=0.5), vjust=3.0) +
  geom_text(aes(label = diff, y = max_y), vjust=-0.5, data = diff_df %>% filter(sim_higher), 
            hjust = 0.0, colour = scales::muted("red")) +
  geom_text(aes(label = diff, y = max_y), vjust=-0.5, data = diff_df %>% filter(!sim_higher), 
            hjust = 1.0, colour = scales::muted("red")) +
  theme_bw(base_size = 18) +
  ylab('Room Nights') + xlab('Week')
库(ggplot2)
图书馆(tidyverse)
DF%
分组依据(变量)%>%
排列(类型、值)%>%
突变(差异=电流-SPLY,
最大值y=最大值(电流,SPLY),
sim(更高=电流>SPLY)
ggplot(DF、aes(变量、值))+
几何图形条(aes(y=最大y),数据=差异df,stat=“identity”,fill=“grey80”,宽度=0.4)+
几何图形条(aes(填充=类型),position=“dodge”,stat=“identity”,width=.5)+
几何图形文字(aes(标签=值,组=类型),位置=位置减淡(宽度=0.5),vjust=3.0)+
geom_文本(aes(标签=diff,y=max_y),vjust=-0.5,数据=diff_df%>%过滤器(sim_更高),
hjust=0.0,颜色=刻度::静音(“红色”))+
几何图形文本(aes(标签=diff,y=max_y),vjust=-0.5,数据=diff_df%>%过滤器(!sim_更高),
hjust=1.0,颜色=刻度::静音(“红色”))+
主题尺寸(基本尺寸=18)+
ylab(“房间之夜”)+xlab(“一周”)
上述代码生成以下图表:

我想在图表中的条形图旁边添加%更改

预期产出:


如何实现这一点?

最简单的方法是为圆圈创建一个单独的小数据框。可以将这些点打印为大的绿色点,然后在其上打印白色文本标签:

circle_df%过滤器(sim_更高),
hjust=0.0,颜色=刻度::静音(“红色”))+
几何图形文本(aes(标签=diff,y=max_y),vjust=-0.5,
数据=差异df%>%过滤器(!sim_更高),
hjust=1.0,颜色=刻度::静音(“红色”))+
几何点(数据=圆形,尺寸=20,颜色=“绿色”)+
几何图形文字(数据=圆形,aes(标签=标签),颜色=“白色”)+
主题尺寸(基本尺寸=18)+
ylab(“房间之夜”)+xlab(“一周”)

最简单的方法是为圆圈创建一个单独的小数据框。可以将这些点打印为大的绿色点,然后在其上打印白色文本标签:

circle_df%过滤器(sim_更高),
hjust=0.0,颜色=刻度::静音(“红色”))+
几何图形文本(aes(标签=diff,y=max_y),vjust=-0.5,
数据=差异df%>%过滤器(!sim_更高),
hjust=1.0,颜色=刻度::静音(“红色”))+
几何点(数据=圆形,尺寸=20,颜色=“绿色”)+
几何图形文字(数据=圆形,aes(标签=标签),颜色=“白色”)+
主题尺寸(基本尺寸=18)+
ylab(“房间之夜”)+xlab(“一周”)

太棒了!有没有一种方法可以计算百分比差异,而不必在代码中硬编码?@user3115933是的,当然可以计算百分比。看我的更新。太棒了!有没有一种方法可以计算百分比差异,而不必在代码中硬编码?@user3115933是的,当然可以计算百分比。查看我的更新。