在R中绘制箱线图,给出25、50、75百分位数以及最小值和最大值。

4

可能是重复问题:
使用预先计算的值进行geom_boxplot

我有一张表格,其中每行是一个不同的样本,每列是名称、最小值、最大值、平均值、第25个百分位数、第50个百分位数、第75个百分位数。这是一个示例。

sample1   1   38   10   8    10   13
sample2   1   39   10   9    11   14
sample3   2   36   11   10   10   13

我想知道如何使用这种格式的数据来制作箱线图,因为这就是实际绘制的数据。上面的格式是一个以制表符分隔的表格。谢谢。

@joran 感谢您指出这一点,我会查看您提到的帖子,如果是这样,我会关闭这个帖子。 - Julio Diaz
@GSee的评论已经消失了,但是他提出了一个很好的观点。我相信boxplot基础函数也接受预先计算的值,但我在SO上没有找到直接处理该函数的问题。 - joran
@joran 从那篇帖子中,我不清楚如何从tsv格式输入数据。我的表格有更多的样本,所以像那样输入数据会很困难。 - Julio Diaz
1
所以,如果看起来你不知道如何将数据从文件读入R中,那似乎就是一个单独的、非常不同的问题,而不是“如何使用预先计算的值制作箱线图”。 - joran
当我发布时,我不知道如何使用预先计算的值制作箱线图。现在我知道如何手动输入数据进行操作,但我猜我现在遇到了将read.tsv转换为data.frame的问题。我将编辑我的问题。 - Julio Diaz
2
请不要改变你问题的本质,这会使当前的答案和评论变得毫无意义。现在你已经知道如何使用预先计算的值制作箱线图,如果在实施该解决方案时遇到特定问题,请提出单独的问题。 - joran
2个回答

9

这篇文章展示了如何使用bxp函数来完成此操作,该函数是boxplot函数使用的函数,但您需要按正确顺序放置数据,第一行为最小值,最后一行为最大值。

首先,读取数据。

dat <- read.table(text="sample1   1   38   10   8    10   13
sample2   1   39   10   9    11   14
sample3   2   36   11   10   10   13", row.names=1, header=FALSE)

然后,按顺序排列并转置
dat2 <- t(dat[, c(1, 4, 5, 6, 2)]) #Min, 25pct, 50pct, 75pct, Max

和绘图

bxp(list(stats=dat2, n=rep(10, ncol(dat2)))) #n is the number of observations in each group

在n=rep(10,3)的最后一行中,3是样本数量,那么10代表什么? - Julio Diaz
3是组数。每组有10个观察值,这只是一个猜测。样本1有多少观察值? - GSee
我认为这里并不重要。如果你想的话,可以将其设置为n=rep(1, 3) - GSee

1

这是一个重复的内容,但出于记录以及因为我已经开始写作...

dat <- data.frame(name=paste0('sample',1:3), min=c(1,1,2), max=c(38,39,36), mean=c(10,10,11), q25=c(8,9,10), q50=c(10,11,10), q75=c(13,14,13))

ggplot(dat, aes(x=name, ymin=min, ymax=max, lower=q25, middle=q50, upper=q75))+geom_boxplot(stat='identity')

我该如何从 TSV 输入数据? - Julio Diaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接