【问题标题】:Convert to tidy format and Plot four density plots in the same plot转换为 tidy 格式并在同一图中绘制四个密度图
【发布时间】:2021-05-02 18:39:31
【问题描述】:

假设我有数据,其中 x、y、z 是三种不同的数据生成方法,列指的是 beta_0、beta_1、beta_2 和 beta_3。我想将其转换为整洁的格式,然后在一个图中绘制 beta_0 的密度(带有 3 条曲线),...,在一个图中绘制 beta_3 的密度(带有 3 条曲线),在一个输出图中绘制所有四个图(所以在 4x4 网格或 4x1 网格中,不管怎样,可能使用 facet_wrap?

我的问题是:这个数据的整洁格式是什么,如果可以把它整理成整齐的格式,然后使用ggplot2生成四个密度(每个图有三个密度曲线)的代码?

玩具数据(“真实”数据对每种方法都有 200 个观察值,而不仅仅是 6 个):

x=matrix(c(4.790584, 2.654499, 1.3987716, 3.504921,
           4.126791, 2.280143, 1.1348528, 3.084783,
           4.555479, 2.226738, 1.7021107, 3.500337,
           4.954719, 2.592864, 1.2658565, 4.213174,
           3.608878, 2.059524, 0.5363011, 2.993644,
           4.399778, 2.001757, 1.0602126, 3.377298), nrow=6, ncol=4, byrow=TRUE)
y=matrix(c(6.850924, 3.694619, 2.549025, 6.045664,
7.740951, 4.504154, 2.513180, 6.255492,
5.026915, 2.540771, 1.726427, 4.743082,
4.835503, 2.842332, 1.666898, 4.308631,
8.186425, 5.331871, 2.919130, 6.724499,
4.641722, 2.646673, 1.486447, 3.931251), nrow=6, ncol=4, byrow=TRUE)
z=matrix(c(4.651634, 2.611540, 1.5819549, 4.107449,
3.716444, 2.097695, 1.0136387, 3.051602,
4.184544, 1.986585, 1.0731731, 3.442379,
6.309591, 2.720760, 2.1551536, 4.572733,
6.614165, 3.253548, 2.6207540, 5.157300,
4.408838, 1.920230, 0.9850924, 3.320052), nrow=6, ncol=4, byrow=TRUE)
tidy=cbind(x, y, z)

【问题讨论】:

    标签: r ggplot2 plot


    【解决方案1】:

    一种选择是使用as.data.frame.tablemap_dfr 将矩阵转换为长格式的“整洁”数据帧。

    第一步是给矩阵起有意义的名字。有几种方法可以做到这一点,但一个简单的选择是provideDimnames。然后将命名矩阵输入map_dfr

    library(tidyverse)
    
    # name the mats
    mats_named <- list(x,y,z) %>%
      purrr::set_names(c('x','y','z')) %>%
      map(function(x) provideDimnames(x, base = list('row','beta'), sep= '_'))
    
    #------
    $x
              beta   beta_1    beta_2   beta_3
    row   4.790584 2.654499 1.3987716 3.504921
    row_1 4.126791 2.280143 1.1348528 3.084783
    row_2 4.555479 2.226738 1.7021107 3.500337
    row_3 4.954719 2.592864 1.2658565 4.213174
    row_4 3.608878 2.059524 0.5363011 2.993644
    row_5 4.399778 2.001757 1.0602126 3.377298
    
    $y
              beta   beta_1   beta_2   beta_3
    row   6.850924 3.694619 2.549025 6.045664
    row_1 7.740951 4.504154 2.513180 6.255492
    ...
    

    将矩阵转换为长格式df并制作图形。

    mats_named %>%
      map_dfr(as.data.frame.table, .id = 'method') %>%
      ggplot() +
      geom_density(aes(Freq, fill = method), alpha = 0.5) +
      facet_wrap(~Var2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多