r - 一个图中 4 个组的多个箱线图
问题描述
我想为一个数据集绘制箱线图,该数据集包括四个分类,例如:好、坏、非常好和非常坏以及四个正态分布。我的问题是如何在一个图中绘制四个不同正态分布的四个分类图,我已经尝试过(见下文),但看起来一团糟。我使用了一个我在这里找到的示例,并对其进行了一些更改。我添加了另一个经过编辑的图,我希望每个箱形图看起来像这样,更清晰,每四个分类(蓝色、黄色、红色和绿色)都清晰。
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
解决方案
如果您没有设置使用 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))
推荐阅读
- android - 如果在 Kotlin 中单击,如何旋转(360°)按钮?
- linux - QtDataVisualization 未安装在 Linux 上
- ios - iOS 到 FTDI 芯片通信
- vb.net - numericupdown 显示错误值
- css - 是否可以在样式组件中使用样式系统的断点?
- android - 预览自定义视图中的 Android ResourceNotFoundException
- ibm-infosphere - 在 IBM MDM 中生成唯一的产品 ID
- php - 在 PDO MySQL SELECT 中使用 TRIM() 时出现语法错误
- excel - Excel公式:根据标题从公式中排除某些列
- r - Psych::Mediate 中的错误:找不到对象