使用 ggplot2 在 R 中绘制箱线图

Boxplot in R using ggplot2

我是 R 的新手,一直在尝试制作箱线图。显示了我正在使用的部分数据

            h1          h2          h3          h4          h5          h6          h7          h8          h9         h10
1  0.003719430 0.002975544 0.003049933 0.003421876 0.003421876 0.003347487 0.003645042 0.003496264 0.007364472 0.009075410
2  0.003400540 0.002749373 0.003038781 0.003328188 0.003328188 0.003400540 0.003472892 0.003400540 0.007741656 0.009333398
3  0.003741387 0.002918282 0.003142765 0.003367248 0.003367248 0.003367248 0.003666559 0.003516904 0.008081396 0.008156223
4  0.003870634 0.002884002 0.003187581 0.003339370 0.003567055 0.003415265 0.003794739 0.003491160 0.008348426 0.007741268
5  0.003782963 0.002950711 0.003177689 0.003480326 0.003404667 0.003404667 0.003707304 0.003631645 0.008927793 0.007414608
6  0.003643736 0.002884624 0.003264180 0.003416002 0.003491913 0.003416002 0.003871469 0.003795558 0.009033428 0.007135649
7  0.003718600 0.003035592 0.003111482 0.003339151 0.003566821 0.003566821 0.003642710 0.003870380 0.008120209 0.008044319
8  0.003819313 0.002979064 0.003284609 0.003360995 0.003590154 0.003437382 0.003895699 0.003590154 0.008326102 0.007791398
9  0.003899334 0.002981844 0.003211216 0.003364131 0.003669961 0.003440589 0.003746419 0.003669961 0.008410328 0.007569295
10 0.003828488 0.002986220 0.003292499 0.003445639 0.003522209 0.003522209 0.003598778 0.003598778 0.008422673 0.007810115

当我使用默认的 boxplot 命令时,这就是我得到的结果

boxplot(df)

我一直在尝试使用 ggplot2 为相同的数据生成箱线图,但它给出了一个我无法解决的错误。这是我尝试过的。

library(ggplot2)
df <- readRDS('data.Rda')
ggplot(df) + geom_boxplot()

这是错误

Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous
Error: Aesthetics must either be length one, or the same length as the dataProblems:df[, 6:15]

我看到 geom_boxplotggplot2 docs 并意识到(从示例中)我需要像

一样重新排列我的数据
col1        col2
h1   0.003719430
h1   0.003400540
h1   0.003741387
h1   0.003870634
h1   0.003782963
h1   0.003643736
h2   0.002975544
h2   0.002749373
h2   0.002918282
h2   0.002884002
h2   0.002950711
h2   0.002884624
...

并使用类似

的东西
ggplot(df, aes(factor(col1), col2)) + geom_boxplot()

但这需要大量工作。我相信一定有某种方法可以自动执行此操作,但我找不到。感谢任何帮助。

你是对的 ggplot 需要重塑你的数据,但使用包 reshape2:

并不难
library(reshape2)
df <- melt(df)
ggplot(df, aes(x=variable, y=value)) + geom_boxplot()