在ggplot2中的平均抖动图中添加平均线

时间:2020-07-31 14:01:38

标签: r ggplot2

我有一个抖动图,其频率为y轴,类别为x轴。在每个类别中,分为两组:

ggplot(plot_core_FGT_free, aes(x = variable, y = value, colour = origin))+
  geom_jitter()+
  labs(y = "Frequency", x = "Metadata factors")+
  scale_x_discrete(labels = c("Gene duplication", "BGC proximity", "Horizontal gene transfer", "Known target"))+
  theme_bw()+
  theme(axis.line = element_line(colour = "black"), 
        panel.background = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank() ,
        text = element_text(size = 15),
        axis.text.x = element_text(angle = 20, hjust = 1))+
  scale_color_grey(start = 0.3, end = 0.7)

enter image description here

我想将这些均值添加到每个类别和组:

     mean                 origin marker         
[1,] "0.3715"             "free" "Gene duplication"  
[2,] "0.15175"            "free" "BGC proximity"
[3,] "0.54125"            "free" "Horizontal gene transfer"    
[4,] "0.10525"            "free" "Known target" 
[5,] "0.344423076923077"  "FGT"  "Gene duplication"  
[6,] "0.146153846153846"  "FGT"  "BGC proximity"
[7,] "0.425576923076923"  "FGT"  "Horizontal gene transfer"    
[8,] "0.0790384615384615" "FGT"  "Known target"

我尝试使用geom_segment和各种stat_summary方法都无济于事,有人可以帮助我吗?

编辑:

ggplot(plot_core_FGT_free, aes(x = variable, y = value, colour = origin))+
  geom_boxplot(size = 1)+
  geom_point(position = position_jitterdodge(), size = 2, alpha = 0.4) +
  labs(y = "Frequency", x = "Metadata factors")+
  scale_x_discrete(labels = function(x) stringr::str_replace(x, " ", "\n")) +
  scale_x_discrete(labels = c("Gene duplication", "BGC proximity", "Horizontal gene transfer", "Known target"))+
  theme(text = element_text(size = 15),
        axis.text.x = element_text(angle = 20, hjust = 1))+
  theme_minimal()

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为后面有一个箱线图看起来不错。

但是我个人真的很难理解您选择的颜色之间的区别...

library(dplyr)
library(ggplot2)

# recreate a mock of your data
df1 <- tibble(value = rnorm(100, 0.3715 ), origin = "free", variable = "Gene duplication")
df2 <- tibble(value = rnorm(100, 0.15175), origin = "free", variable = "BGC proximity")
df3 <- tibble(value = rnorm(100, 0.54125), origin = "free", variable = "Horizontal gene transfer")
df4 <- tibble(value = rnorm(100, 0.10525), origin = "free", variable = "Known target")
df5 <- tibble(value = rnorm(100, 0.344423076923077 ), origin = "FGT" , variable = "Gene duplication")
df6 <- tibble(value = rnorm(100, 0.146153846153846 ), origin = "FGT" , variable = "BGC proximity")
df7 <- tibble(value = rnorm(100, 0.425576923076923 ), origin = "FGT" , variable = "Horizontal gene transfer")
df8 <- tibble(value = rnorm(100, 0.0790384615384615), origin = "FGT" , variable = "Known target")
df <- bind_rows(df1,df2,df3,df4,df5,df6,df7,df8)

您的图表+箱形图:

ggplot(df, aes(x = variable, y = value, colour = origin))+
  geom_boxplot(size = 1)+
  geom_jitter()+
  labs(y = "Frequency", x = "Metadata factors") +
  theme_minimal() +
  theme(axis.line = element_line(colour = "black"),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank() ,
        text = element_text(size = 15),
        axis.text.x = element_text(angle = 20, hjust = 1)) +
  scale_color_grey(start = 0.3, end = 0.7)

enter image description here

如果可以的话,我建议您使用此选项:

ggplot(df, aes(x = variable, y = value, colour = origin))+
  geom_boxplot(size = 1)+
  geom_point(position = position_jitterdodge(), size = 2, alpha = 0.4) +
  labs(y = "Frequency", x = "Metadata factors")+
  scale_x_discrete(labels = function(x) stringr::str_replace(x, " ", "\n")) +
  theme_minimal()

enter image description here

答案 1 :(得分:1)

以下将绘制平均线。诀窍是将新的 <a data-id="{{ $student->id }}" class="btn btn-primary butto">view</a>参数传递给data。变量geom_segment是段的长度。该代码已简化为专注于问题。

segm_len

数据

library(ggplot2)
library(dplyr)

segm_len <- 0.8

ggplot(df, aes(variable, value, color = origin)) +
  geom_jitter() +
  geom_segment(data = dfmean %>% mutate(marker = as.integer(factor(marker))),
               aes(x = marker - segm_len/2, xend = marker + segm_len/2, 
                   y = mean, yend = mean, 
                   color = origin)) +
  scale_color_grey(start = 0.3, end = 0.7) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))