ggplot2 3并排直方图

我是R的新手,并且设法创建了以下数据框

MinVariance MaxSharpe RiskParity

HYLD       0.44      0.00       0.28

IBTL        0.00      0.07       0.11

IBTM        0.36      0.00       0.15

SGLN        0.00      0.56       0.12

SLXX        0.20      0.00       0.20

VMVL        0.00      0.36       0.14

我想在一张图(并排)中创建3个直方图,以显示每个资产分配的权重

评论
  • 负能量
    负能量 回复

    这是拥有躲避条形图的一种方法(您不想要带有离散变量的直方图):

    dfr <- read.table(text = 'MinVariance MaxSharpe RiskParity
    
    HYLD 0.44 0.00 0.28
    
    IBTL 0.00 0.07 0.11
    
    IBTM 0.36 0.00 0.15
    
    SGLN 0.00 0.56 0.12
    
    SLXX 0.20 0.00 0.20
    
    VMVL 0.00 0.36 0.14')
    
    suppressPackageStartupMessages( library(dplyr) )
    suppressPackageStartupMessages( library(tidyr) )
    suppressPackageStartupMessages( library(ggplot2) )
    
    dfr_long <- dfr %>% as_tibble(rownames = 'type') %>%  
        pivot_longer(., cols = -type, names_to = 'vars', values_to = 'vals')
    dfr_long
    #> # A tibble: 18 x 3
    #>    type  vars         vals
    #>    <chr> <chr>       <dbl>
    #>  1 HYLD  MinVariance  0.44
    #>  2 HYLD  MaxSharpe    0   
    #>  3 HYLD  RiskParity   0.28
    #>  4 IBTL  MinVariance  0   
    #>  5 IBTL  MaxSharpe    0.07
    #>  6 IBTL  RiskParity   0.11
    #>  7 IBTM  MinVariance  0.36
    #>  8 IBTM  MaxSharpe    0   
    #>  9 IBTM  RiskParity   0.15
    #> 10 SGLN  MinVariance  0   
    #> 11 SGLN  MaxSharpe    0.56
    #> 12 SGLN  RiskParity   0.12
    #> 13 SLXX  MinVariance  0.2 
    #> 14 SLXX  MaxSharpe    0   
    #> 15 SLXX  RiskParity   0.2 
    #> 16 VMVL  MinVariance  0   
    #> 17 VMVL  MaxSharpe    0.36
    #> 18 VMVL  RiskParity   0.14
    
    dfr_long %>%    
        ggplot( aes(x = vars, y = vals, fill = type) ) +
        geom_col(position = 'dodge')
    
  • 浅雨夕
    浅雨夕 回复

    尝试将ggplot2打包为geom_histogram和facet_wrap

  • adolor
    adolor 回复

    要绘制直方图,您可以使用

    library(tidyverse)
    
    dfr %>% as_tibble(rownames = 'type') %>%  
      pivot_longer(., cols = -type, names_to = 'vars', values_to = 'vals') %>% 
      ggplot() +
      geom_histogram(aes(vals, fill = type))+facet_wrap(vars~.)
    

    enter image description here