使用 qplot/ggplot2 的简单箱线图

simple boxplot using qplot/ggplot2

这是我的第一个 post,所以放轻松。直到现在(过去 ~5 年?)我已经能够以正确的方式调整我的 R 代码,或者在这个网站或其他各种网站上找到答案。相信我,我一直在寻找答案! 我有一个工作脚本可以在基本 R 中创建附加的箱线图。 http://i.stack.imgur.com/NaATo.jpg

这很好,但我真的只是想 "jazz" 在 ggplot 中显示它,但无济于事。 我查看了以下问题,它们很接近,但不完整: Why does a boxplot in ggplot requires axis x and y? How do you draw a boxplot without specifying x axis?

如果所有数值变量都在同一尺度上,我的数据基本上就像 "mtcars"。 我想要做的就是在同一个箱线图上绘制每个变量,就像我上面制作的基本 R 箱线图一样。对于每个框,我的 y 轴是相同的连续刻度(0 到 1),而 x 轴只是每月标记加上年平均值(认为所有 mtcars 在 y 轴上的值相同,x 轴是每个车型)。我的数据的每个框代表 75 个观察结果(有点像 mtcars 有 75 种不同的车型),同样所有的框都在相同的范围内。 我错过了什么?

虽然我认为 mtcars 不是一个很好的例子,但这里是:

首先,我们通过使用列而不是行名使数据(希望)与您的数据更相似。

mt = mtcars
mt$car = row.names(mtcars)

然后我们reshape为长格式:

mt_long = reshape2::melt(mt, id.vars = "car")

那么剧情就简单了:

library(ggplot2)
ggplot(mt_long, aes(x = variable, y = value)) +
    geom_boxplot()

使用 ggplot 全部但需要 "long" 格式的数据而不是 "wide" 格式。如果您希望将某些内容映射到图形维度(x 轴、y 轴、颜色、形状等),那么它应该是您数据中的一列。幸运的是,通常很容易使用 reshape2::melttidyr::gather 以正确的格式获取数据。我建议阅读 the Tidy Data paper 以了解有关此主题的更多信息。