如何在r中绘制点图并用点表示平均值和误差线

时间:2019-07-28 12:13:38

标签: r

我有一个包含连续变量(名为PI的列)和3个类别(名为Size的列)的数据集。我想为每个类别的所有PI值绘制一个点图,并为平均值和SE误差线表示另一个点。 Ross等人的论文中的内容看起来像这样:

enter image description here

这是我到目前为止(我已将所有点和均值作图),但看起来不像纸上的图片

p<-ggplot(Index,aes(x=Size,y=PI)) + geom_dotplot(binaxis='y',stackdir='center',dotsize=0.5)
p

p + stat_summary(fun.y=mean,geom="point",shape=18,size=3,colour=c("red","blue","green"))

#to add SE bars
p + stat summary(fun.data=mean_sdl,fun.args=list(multi=1),geom="pointrange",colour="red")
p + stat_summary(fun.data=mean_sdl, fun.args = list(mult=1), 
                 geom="pointrange", color="red")

    library(ggplot2)
`library(Hmisc)`

library(gplots)

library(dplyr)
plot_data<-Index %>%
  group_by(Size) %>%  
  summarise(mean=mean(PI),sd=sd(PI))  
m<-plot_data$mean
s<-plot_data$sd
plot(plot_data$Size,plot_data$mean,ylim=range(0:5),border="white",xlab="Body Size",ylab="Performance Index", ylim(c(1,3)))
points(jitter(as.numeric(Index$Size)),Index$PI,col=as.integer(Index$Size)+1,pch=19)
segments(x0=1:3,x1=1:3,y0=m-s,y1=m+s,lwd=2)
segments(x0=1:3-0.2,x1=1:3+0.2,y0=m,y1=m,lwd=2)
segments(x0=1:3-0.1,x1=1:3+0.1,y0=m+s,y1=m+s,lwd=2)
segments(x0=1:3-0.1,x1=1:3+0.1,y0=m-s,y1=m-s,lwd=2)

1 个答案:

答案 0 :(得分:0)

由于我们没有您的数据,我们将使用预先设置的数据集warpbreaks进行说明

data("warpbreaks")

您的尝试是一次不错的尝试

ggplot(warpbreaks, aes(x = tension, y = breaks)) +
    geom_dotplot(binaxis = 'y', stackdir = 'center', dotsize = 0.5) +
    stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
                 geom = "pointrange", colour = "red")

enter image description here

但是,我认为我们可以通过使用基本图形“手动”执行操作来获得更好的结果

library(dplyr)
plot_data <- warpbreaks %>%
    group_by(tension) %>%
    summarise(mean = mean(breaks), sd = sd(breaks))
m <- plot_data$mean
s <- plot_data$sd
plot(plot_data$tension, plot_data$mean, ylim = range(warpbreaks$breaks),
     border = "white", xlab = "Tension", ylab = "Breaks")
points(jitter(as.numeric(warpbreaks$tension)), warpbreaks$breaks,
       col = as.integer(warpbreaks$tension) + 1, pch = 19)
segments(x0 = 1:3, x1 = 1:3, y0 = m - s, y1 = m + s, lwd = 2)
segments(x0 = 1:3 - 0.2, x1 = 1:3 + 0.2, y0 = m, y1 = m, lwd = 2)
segments(x0 = 1:3 - 0.1, x1 = 1:3 + 0.1, y0 = m + s, y1 = m + s, lwd = 2)
segments(x0 = 1:3 - 0.1, x1 = 1:3 + 0.1, y0 = m - s, y1 = m - s, lwd = 2)

enter image description here