首页 > 解决方案 > 如何向 stat_summary 行添加其他行以及如何更改 ggplot2 geom_dotplot 中的形状?

问题描述

我正在制作 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")

在此处输入图像描述

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

在此处输入图像描述

是否有 R 函数来指示统计线,如第二个图。据我所知,没有 R 函数可以使线条像第二个情节。如果我使用“geom_hline”和“geom_vline”,我可以制作。但是,它在计算统计数据后手动添加行。我喜欢检查除“geom_hline”和“geom_vline”之外是否有 R 函数,以使线条像第二个绘图。

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

你能帮忙吗?谢谢,

标签: ggplot2

解决方案


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

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

最后,为了改变shape=……geom_dotplot似乎是个坏消息,它不是一种公认​​的审美。我能做的最好的就是 set 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
  )

在此处输入图像描述


推荐阅读