我有一个包含连续变量(名为PI的列)和3个类别(名为Size的列)的数据集。我想为每个类别的所有PI值绘制一个点图,并为平均值和SE误差线表示另一个点。 Ross等人的论文中的内容看起来像这样:
这是我到目前为止(我已将所有点和均值作图),但看起来不像纸上的图片
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)
答案 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")
但是,我认为我们可以通过使用基本图形“手动”执行操作来获得更好的结果
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)