【问题标题】:Multiple box plots for 4 groups in one plot一个图中 4 个组的多个箱线图
【发布时间】:2018-07-03 19:08:12
【问题描述】:

我想为一个数据集绘制箱线图,该数据集包括四个分类,例如:好、坏、非常好和非常坏以及四个正态分布。 我的问题是如何在一个图中绘制四个不同正态分布的四个分类图,我已经尝试过(见下文),但看起来一团糟。 我使用了一个我在这里找到的示例,并对其进行了一些更改。 我添加了另一个经过编辑的图,我希望每个箱形图看起来像这样,更清晰,每四个分类(蓝色、黄色、红色和绿色)都清晰。

par(mfrow=c(2,2))
df <- data.frame(id = c(rep("Good",200), rep("Bad", 200),
                        rep("VeryGood",200), rep("VeryBad",200)),
           F1 = c(rnorm(200,10,2), rnorm(200,8,1), rnorm(200,5,2),rnorm(200,7,3)),
           F2 = c(rnorm(200,7,1),  rnorm(200,6,1), rnorm(200,8,1),rnorm(200,12,4)),
           F3 = c(rnorm(200,6,2),  rnorm(200,9,3),rnorm(200,12,3),rnorm(200,15,2)),
           F4 = c(rnorm(200,12,3), rnorm(200,8,2),rnorm(200,8,5),rnorm(200,5,1)))

boxplot(df[,-1], xlim = c(0.5, ncol(df[,-1])+0.9), 
        boxfill=rgb(1, 1, 1, alpha=1), border=rgb(1, 1, 1, alpha=1)) #invisible boxes
boxplot(df[which(df$id=="Good"), -1], xaxt = "n", add = TRUE, boxfill="red", boxwex=0.25, 
        at = 1:ncol(df[,-1]) - 0.15) #shift these left by -0.15
boxplot(df[which(df$id=="Bad"), -1], xaxt = "n", add = TRUE, boxfill="blue", boxwex=0.25,
        at = 1:ncol(df[,-1]) + 0.15) #shift these right by +0.15
boxplot(df[which(df$id=="VeryBad"), -1], xaxt = "n", add = TRUE, boxfill="green", boxwex=0.25,
        at = 1:ncol(df[,-1]) + 0.25) #shift these right by +0.15
boxplot(df[which(df$id=="VeryGood"), -1], xaxt = "n", add = TRUE, boxfill="yellow", boxwex=0.25,
        at = 1:ncol(df[,-1]) + 0.45) #shift these right by +0.15

【问题讨论】:

  • 看起来你的所有 4 个地块都是一样的。去掉par(mfrow=c(2,2))会更好看吗?
  • 你是对的@G5W,这里举个例子。我会将它用于获得类似想法的真实数据。
  • 您能否发布所需的输出,因为不清楚问题是什么?这可能需要您使用图像编辑器并为我们画出视觉效果。
  • 同意不清楚需要什么。不同的轴标签?标题?
  • 我想你是说虽然这四个是一样的,但是当你使用你的真实数据时,会有四个不同的情节,所以你需要使用par(mfrow=c(2,2))。对吗?

标签: r boxplot


【解决方案1】:

如果您没有设置使用 Base R 图形,并查看您添加到问题中的新图,我相信这就是您要寻找的:

library(dplyr)
library(tidyr)
library(ggplot2)

df <- data.frame(id = c(rep("Good",200), rep("Bad", 200),
                        rep("VeryGood",200), rep("VeryBad",200)),
                 F1 = c(rnorm(200,10,2), rnorm(200,8,1), rnorm(200,5,2),rnorm(200,7,3)),
                 F2 = c(rnorm(200,7,1),  rnorm(200,6,1), rnorm(200,8,1),rnorm(200,12,4)),
                 F3 = c(rnorm(200,6,2),  rnorm(200,9,3),rnorm(200,12,3),rnorm(200,15,2)),
                 F4 = c(rnorm(200,12,3), rnorm(200,8,2),rnorm(200,8,5),rnorm(200,5,1)))

df2 <- tidyr::gather(df, key = "FVar", value = "value", F1:F4)

df2 %>% 
  ggplot(aes(id, value, fill = id)) + 
  geom_boxplot() + 
  facet_grid(. ~ FVar) + 
  theme(axis.text.x = element_text(angle = 90, hjust = 0.5, vjust = 0.5))

【讨论】:

  • 我试过你的代码,但给了我一个错误。 valid.charjust(just) 中的错误:水平对齐无效
  • 我添加了所有代码,包括您的示例数据,并在新的 R 会话中重新运行,没有任何错误。
  • @R.Saeiti - 还有问题吗?
猜你喜欢
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
相关资源
最近更新 更多