如何使用ggbarplot将单个数据点添加到条形图中? 添加抖动不起作用,点图也不起作用

问题描述

我很难用ggbarplot在条形图上添加单个数据点。我似乎有一个问题,尤其是在多组数据(使用填充或颜色)上。我尝试了几种添加点的方法,但是它们要么导致错误添加抖动),要么点未正确对准正确的条(添加点图)。任何帮助将不胜感激。

示例数据:

library(ggpubr)


#dataframe
ER <- read.table(header=TRUE,text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")

如果使用“ add = c(point)”,我可以使其正常工作,但是当我尝试使用“ add = c(jitter)”时,会导致错误(“ position_jitterdodge()'至少需要一种美学我已经看过类似的问题,但是通常可以通过将分组因子添加到“填充”而不是“颜色”中来解决。我都尝试了这两种方法,但均无济于事。

e <- ggbarplot(ER,x = "Sex",y = "ER",title = "Arcuate Nucleus",ylab= "ER Labeling",xlab = "Group",color = "Group",add = c("mean_se","jitter"),add.params = list(color = "black"),palette = "jco",position = position_dodge(.8)) 
print(e) 

尝试使用“ add = c(“ dotplot)”会导致点混在第二组之间,并显示在两个并排的组之间。

e2 <- ggbarplot(ER,"dotplot"),position = position_dodge(.8)) 
print(e2) 

这似乎可行...但是我真的很想使用不同的颜色,形状并增加抖动。下面的示例。

e3 <- ggbarplot(ER,"point"),position = position_dodge(.8)) + theme(axis.line = element_line(size = 0.9),axis.ticks = element_line(size = 0.9)) 

print(e3)

enter image description here

解决方法

问题在于,使用add.params(color = "black")会覆盖躲避点所需的分组(color = "Group")。因此,删除add.params(color = "black")将使您的代码正常工作。如果您想要黑点和误差线,可以通过例如通过将所有组的颜色设置为scale_color_manual"black"

library(ggpubr)
#> Loading required package: ggplot2

ER <- read.table(header=TRUE,text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")

ggbarplot(ER,x = "Sex",y = "ER",title = "Arcuate Nucleus",ylab= "ER Labeling",xlab = "Group",color = "Group",fill = "Group",add = c("mean_se","jitter"),palette = "jco",position = position_dodge(.8)) +
  scale_color_manual(values = c(V = "black",Z = "black"))

编辑

问题在于ggpubr之类的软件包提供了很多现成的功能。付出的“代价”是开箱即用的解决方案有其局限性。如果您想更好地控制图表的外观,则必须使用ggplot2(至少部分地)进行操作,例如为点着色可以使用geom_jitter使点抖动。在这里,我更改了点的形状,以便可以添加黑色轮廓。不幸的是,无法更改fill的颜色以及抖动填充要求填充aes:

ggbarplot(ER,add = c("mean_se"),Z = "black")) +
  geom_jitter(aes(Sex,ER,fill = Group),shape = 21,color = "black",position = position_jitterdodge(jitter.height = .1,jitter.width = .2))

另一种选择是使用例如

geom_jitter(aes(Sex,color = "grey",jitter.width = .2))

这可以让您“充满”,例如“灰色”点,但没有轮廓。