如何在stat_summary行中添加其他行,以及如何在ggplot2 geom_dotplot中更改形状?

时间:2020-05-11 23:19:35

标签: ggplot2

我正在制作ggplot,geom_dotplot,并通过“ stat_summary”添加了几行。请参见下面的代码和图解。 “ stat_summary”将在方框中指示均值,均值-sd和均值+ sd。

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
library(ggplot2)
p<-ggplot(ToothGrowth, aes(x=dose, y=len))+ 
  geom_dotplot(binaxis='y', stackdir='center', dotsize=0.5)+theme_classic()

data_summary <- function(x) {
  m <- mean(x)
  ymin <- m-sd(x)
  ymax <- m+sd(x)
  return(c(y=m,ymin=ymin,ymax=ymax))
}

p+stat_summary(fun.data=data_summary,geom="crossbar",width=0.5,color="blue")

enter image description here

然后,我要制作的最后一个图是在中间添加新的垂直线,并在外部移除旧的垂直线,如下所示。我从上面的情节手动制作了这个情节。

enter image description here

是否存在R函数来指示统计线,如第二幅图。据我所知,没有R函数可以像第2个图一样绘制线条。如果我使用'geom_hline'和'geom_vline',我可以做。但是,它是在计算统计信息后手动添加行。我想检查是否有除'geom_hline'和'geom_vline'以外的R函数,以使线条像第二个图一样。

又一个问题;如何使用'geom_dotplot()'更改点的形状?我在ggplot()中尝试过,但是没有用。我知道,如果我使用“ geom_point”,则可以更改形状。但是,'geom_point(shape = 5)+ geom_jitter'无法制作堆叠的点,因此我应该使用'geom_dotplot'。我用谷歌搜索找到一种方法来更改'geom_dotplot'中的形状,但没有结果。

您能帮忙吗? 谢谢

1 个答案:

答案 0 :(得分:1)

最好将水平线绘制为mean。您可能可以使用ungeviz包和geom_hpline()函数(documentation here)来做到这一点。该软件包不适用于我的R版本,并且我现在不打算更新,因此“作弊”的方式是使用geom_crossbar,而只使用ymin=ymax=y

然后其余的形状将是geom_errorbar的常规结构,因此只需使用您的data_summary函数即可。

最后,要在shape=中更改geom_dotplot,似乎是it's not a recognized aesthetic的坏消息。我所能做的最好是设置fill=NA,这样您就可以用圆圈代替实心圆点。

data_summary_collapsed <- function(x) {
  m <- mean(x)
  ymin <- m
  ymax <- m
  return(c(y=m,ymin=ymin,ymax=ymax))
}

ggplot(iris, aes(x=Species, y=Sepal.Width)) +
  theme_minimal() +
  geom_dotplot(binaxis='y', stackdir='center', dotsize=0.5, fill=NA) +
  stat_summary(
    geom='crossbar',
    fun.data=data_summary_collapsed,
    width=0.3,
    color='blue'
  ) +
  stat_summary(
    geom='errorbar',
    fun.data=data_summary,
    width=0.2,
    color='blue',
    size=1.2
  )

enter image description here