首页 > 解决方案 > 转换数据并使用 R 中的构面创建直方图

问题描述

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

有人可以展示如何使用 pivot_longer() 转换数据,使用它将_三个部分分开tnamelist1以及namelist2

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

谢谢

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

标签: rggplot2tidyverse

解决方案


下面的第一段代码将示例数据重新排列为三列数据框,每一列对应于“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)

输出


推荐阅读