【问题标题】:transform the data and create histogram with facets in R转换数据并使用 R 中的构面创建直方图
【发布时间】:2021-02-03 22:25:50
【问题描述】:

我有 400 个动态名称的列 (t_namelist1_namelist2)。每个 namelist1 和 namelist2 中有 20 个名称。我必须创建一个带有标签的直方图20 by 20 -

  • 沿行 - namelist1
  • 沿着 col - namelist2

有人可以展示如何使用pivot_longer() 转换数据,使用_ 分隔tnamelist1namelist2 三个部分

在示例问题中,我有一个包含 4 列的小标题,我想在 2by2 带有标签的方面创建 4 个单独的直方图 -

  • 沿行 - a 和 b
  • 沿着 col - x 和 y

谢谢

library(tidyverse)

t_a_x <- rnorm(100)
t_b_x <- rnorm(100)
t_a_y <- rnorm(100)
t_b_y <- rnorm(100)

tbl <- tibble(t_a_x, t_a_y, t_b_x, t_b_y)


# create a histogram in 2 by 2 facets with labels - 
# along row - a and b
# along col - x and y

【问题讨论】:

    标签: r ggplot2 tidyverse


    【解决方案1】:

    下面的第一段代码将示例数据重新排列为三列数据框,每一列对应于“ab”、“xy”或值(“t”);基本上用“_”分隔原始列名。然后你可以根据“xy”和“ab”进行绘图和分面。

    
    # Rearrange table by separating the column names by "_" using pivot_longer()
    tbl_formatted <- tbl %>% pivot_longer(everything(),
       names_to = c(".value", "ab", "xy"),
       names_sep = c("_")
         ) 
    
    # Plot
    tbl_formatted %>% ggplot(aes(x = t, y = t)) +
       geom_point() + 
       facet_wrap(facets = ab ~ xy)
    
    

    【讨论】:

      【解决方案2】:

      这是一个非常基本的情节版本;您可以使用颜色等对其进行自定义。

      要获得它,您需要正确重新排列数据框:

      library(tidyverse)
      
      tbl <- tibble(value = c(t_a_x, t_b_x, t_a_y, t_b_y), 
                    lab1 = rep(c("a", "b", "a", "b"), each = 100),  
                    lab2 = rep(c("x", "x", "y", "y"), each = 100))
      
      ggplot(tbl) + 
        geom_histogram(aes(value), binwidth = 0.5) + 
        facet_grid(lab1~lab2)
      

      【讨论】:

      • 感谢莱昂纳多,但这是一个示例。在实际情况下,我必须创建 20 x 20 刻面,并且很难为动态情况编写 lab1 和 lab2。您能否使用 pivot_longer() 函数显示动态解决方案
      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多