我正在制作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函数可以像第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'中的形状,但没有结果。
您能帮忙吗? 谢谢
答案 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
)