【问题标题】:How to create box plot displaying mean and standard deviation and a scatterplot of points as well如何创建显示均值和标准差的箱线图以及点的散点图
【发布时间】:2017-08-23 21:24:36
【问题描述】:

我正在尝试通过修改下面的代码来创建显示均值和标准差的箱线图以及软件 R 中点的散点图。

library(ggplot2)

# create fictitious data
a <- runif(10)
b <- runif(12)
c <- runif(7)
d <- runif(15)

# data groups
group <- factor(rep(1:4, c(10, 12, 7, 15)))

# dataframe
mydata <- data.frame(c(a,b,c,d), group)
names(mydata) <- c("value", "group")

# function for computing mean, DS, max and min values
min.mean.sd.max <- function(x) {
  r <- c(min(x), mean(x) - sd(x), mean(x), mean(x) + sd(x), max(x))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}

# ggplot code
p1 <- ggplot(aes(y = value, x = factor(group)), data = mydata)
p1 <- p1 + stat_summary(fun.data = min.mean.sd.max, geom = "boxplot") + geom_jitter(position=position_jitter(width=.2), size=3) + ggtitle("Boxplot con 
   media, 95%CI, valore min. e max.") + xlab("Gruppi") + ylab("Valori")

这是我的数据集:

number  name    percent
1   CD1_lung1   0.824214533
3   CD1_lung2   1.118706494
5   CD1_lung3   1.271139637
7   CD1_lung4   0.785939335
9   CNR_20  0.592576592
11  CNR_lung    1.764129689
13  CNR_2   0.643293719
2   Gpc_KO1_lung    0.730014957
4   Gpc_KO2_lung    0.679556429
6   Gpc_KO3_lung    1.00910329
8   KO12    1.074708817
10  Gpc1_hom_lung   1.86280637
12  KO35    0.521546931
14  KO45    0.486304707

我使用 read.table("C:/Users/me/Desktop/WB0823_m1/wb0823R.txt", header = TRUE) 将它加载到 R 中但是,由于我对使用 R 非常陌生,因此我一直坚持下一步该做什么。如果有更简单的方法可以在 MATLAB 或 Stata 中创建此箱线图,我也想知道!这两个软件中的任何一个我都无法弄清楚。

【问题讨论】:

  • 即使在 R 中,除了代码已经完成的功能之外,知道您想要什么也会有所帮助。你说你要修改代码:加什么?删除什么?改变什么?传统上,箱线图基于显示中位数和四分位数的框,尽管显示的其他内容有很多变化。对于 Stata 和 MATLAB,我认为您要求的代码来绘制您没有完全解释甚至举例说明的图形,或者您假设您具有完美的双语流利程度。 .
  • 进一步,问题和你的最终数据集有什么关系?从表面上看,您有 14 个名称和一个测量值,因此计算平均值和 SD 的唯一范围是将它们放在一起。
  • 我认为了解分析的目标和数据的含义会很有帮助。您的数据中是否有重复/哪些是组?这些值是您的原始数据还是某种聚合?从您的帖子中完全不清楚。
  • 对不起,我不清楚。我正在尝试创建一个类似于此链接中的图表的箱线图:statistic-on-air.blogspot.com/2014/02/…
  • 基本上我想创建一个显示均值、均值 + sd 和均值 -sd 的箱线图,并在有意义的情况下将我的数据点绘制在箱线图的顶部?

标签: r matlab stata scatter-plot boxplot


【解决方案1】:

您只需将数据读入 R 并决定将哪些人分组,然后其余代码就可以工作了。要编辑情节,ggplot2 有一个有用的网站:http://ggplot2.tidyverse.org/reference/。这应该可以帮助您开始:

library(ggplot2)

#read data into R (I just pasted your data into a blank text file)
mydata <- read.table("~/Desktop/tmp.txt",header=T) 

#add a column to group observations (I guessed here)
mydata$group <- c(1,1,1,1,2,2,2,3,3,3,4,3,4,4)

# function for computing mean, DS, max and min values
min.mean.sd.max <- function(x) {
  r <- c(min(x), mean(x) - sd(x), mean(x), mean(x) + sd(x), max(x))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}

# ggplot code 
ggplot(aes(y = percent, x = factor(group)), data = mydata)+
  ggtitle("Boxplot con media, 95%CI, valore min. e max.")+xlab("Gruppi")+ylab("Valori")+
  stat_summary(fun.data = min.mean.sd.max, geom = "boxplot")+
  geom_jitter(position=position_jitter(width=.2), size=3) 

【讨论】:

  • 谢谢!对于分组,由于我的前 7 个值是控制值,而后 7 个值也被分组在一起,是否将行更改为 mydata$group
  • 是的,这将为您提供两组进行绘图。
猜你喜欢
  • 1970-01-01
  • 2017-11-16
  • 2015-03-30
  • 2021-06-04
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多