如何在 R 中使用 ggplot 绘制多列?

数据挖掘 r 可视化 ggplot2
2021-09-24 12:46:54

我确实有一个具有不同分类和数字列的数据框,其架构如下:

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 轴是各个选定列(不是其他列)的分布。到目前为止,我无法解决这个组合任务。

谢谢你。

1个回答

如果我对您的问题的理解正确,您希望根据数据集的选定分类列绘制选定的数字列,对吗?

如果是这样,您可以使用dplyr,tidyrggplot2包来实现这一点。

从此数据框开始:

  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)