【问题标题】:How to plot dot plot in r with a point representing the mean and error bars如何在 r 中绘制点图,其中一个点表示平均值和误差线
【发布时间】:2019-07-28 12:13:38
【问题描述】:

我有一个包含连续变量(名为 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)

【问题讨论】:

  • 欢迎来到 Stack Overflow!通过提供minimal reproducible example 帮助他人帮助您。特别是,您应该通过编辑您的问题以包含dput(Index) 的输出来提供您的数据。如果Index 是一个大数据框,您可能希望改用dput(head(Index, 10)) 的输出

标签: r


【解决方案1】:

由于我们没有您的数据,我们将使用预先制作的数据集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)

【讨论】:

  • 嗨,非常感谢!我刚刚在我的数据上运行了这个,我的数据点的负载似乎已经消失了(每个类别我有 15 个重复)。我想这可能是因为我总共有 9 种治疗方法(3 种尺寸和 3 种饮食),但我只想绘制尺寸,我认为它只是绘制每种尺寸的 3 种饮食的平均值。无论如何我可以在那里得到每个复制品吗?上面的误差线是标准误差还是标准偏差?非常感谢!!
  • @Lizzie 这些条形表示与平均值相差 1 个标准差,因为您的问题中显示的 Ross 等人(2018 年)的图 5 标题表明他们使用的是(link)。听起来您需要第二个分组变量,但如果没有至少查看 (1) 您的数据和 (2) 代码现在为您生成的数字,可能很难说。您可以编辑您的问题以包含这些内容,也许我可以更新答案。您还需要包含您使用的确切修改代码(即您如何更改数据名称等))
  • 我无法上传我的数据列,因为我不知道怎么做,但我有 4 列:体型(3 个类别)、生成(3 个类别)、复制(每次治疗 5 次重复,例如小体型和第 1 代和 PI(连续)
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多