我确实有一个具有不同分类和数字列的数据框,其架构如下:
Id | num_col_1 | num_col_2 | num_col_3 | cat_col_1 | cat_col_2
现在我想用 ggplot 绘制一个组合图,其中我(box)绘制某些数字列(num_col_2,num_col_2)和 boxplot 组,根据每个数字列的 cat_col_1 因子水平。沿 y 轴是各个选定列(不是其他列)的分布。到目前为止,我无法解决这个组合任务。
谢谢你。
我确实有一个具有不同分类和数字列的数据框,其架构如下:
Id | num_col_1 | num_col_2 | num_col_3 | cat_col_1 | cat_col_2
现在我想用 ggplot 绘制一个组合图,其中我(box)绘制某些数字列(num_col_2,num_col_2)和 boxplot 组,根据每个数字列的 cat_col_1 因子水平。沿 y 轴是各个选定列(不是其他列)的分布。到目前为止,我无法解决这个组合任务。
谢谢你。
如果我对您的问题的理解正确,您希望根据数据集的选定分类列绘制选定的数字列,对吗?
如果是这样,您可以使用dplyr,tidyr和ggplot2包来实现这一点。
从此数据框开始:
id num1 num2 num3 cat cat2
1 C -0.48892284 1.417909 2.8884577 a f
2 C -0.62795166 1.472390 1.6625688 c f
3 B -0.04691673 2.731553 0.9692889 c e
4 B 0.16261812 -1.152528 2.4308332 a d
5 C 1.29230591 -1.609465 2.2089074 a f
6 E -0.46355650 -1.070132 0.4517597 b f
基本上,您首先选择感兴趣的列(此处和) num1,然后使用函数将数据重塑为更长的格式以获得类似的内容:num2catpivot_longer
library(tidyr)
library(dplyr)
df %>% select(id, num1, num2, cat) %>%
pivot_longer(., cols = c(num1,num2), names_to = "Var", values_to = "Val")
# A tibble: 200 x 4
id cat Var Val
<fct> <fct> <chr> <dbl>
1 C a num1 -0.489
2 C a num2 1.42
3 C c num1 -0.628
4 C c num2 1.47
5 B c num1 -0.0469
6 B c num2 2.73
7 B a num1 0.163
8 B a num2 -1.15
9 C a num1 1.29
10 C a num2 -1.61
# … with 190 more rows
ggplot最后,您可以通过调用and将绘图部分添加到此管道序列中geom_boxplot:
library(tidyr)
library(dplyr)
library(ggplot2)
df %>% select(id, num1, num2, cat) %>%
pivot_longer(., cols = c(num1,num2), names_to = "Var", values_to = "Val") %>%
ggplot(aes(x = Var, y = Val, fill = cat)) +
geom_boxplot()
是你要找的吗?
数据
set.seed(123)
id <- sample(LETTERS[1:5],100, replace = TRUE)
num1 <- rnorm(100)
num2 <- rnorm(100)*2
num3 <- rnorm(100)+2
cat <- sample(letters[1:3],100, replace = TRUE)
cat2 <- sample(letters[4:6],100, replace = TRUE)
df <- data.frame(id, num1, num2,num3, cat,cat2)