跟进:如何在R中制作森伯斯特图?

时间:2019-03-20 14:27:29

标签: r ggplot2 data-visualization sunburst-diagram

我是R的新手,我会在评论中直接问这个问题,但我还没有口碑:D

基本上,我想创建一个朝阳图,如该线程中建议的dmp:How to make a sunburst plot in R or Python?

但是,我的数据框看起来更像这样:

df <- data.frame(
    'level1'=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'), 
    'level2'=c('AA', 'BB', 'CC', 'AA', 'BB', 'CC', 'AA', 'BB'), 
    'value'=c(12.5, 12.5, 75, 50, 25, 25, 36, 64))

所以当我按如下方式绘制旭日形图时:

ggplot(df, aes(y=value)) +
    geom_bar(aes(fill=level1, x=0), width=.5, stat='identity') + 
    geom_bar(aes(fill=level2, x=.25), width=.25, stat='identity') + 
    coord_polar(theta='y')

ggplot将level2分组在一起(因此将所有AA加在一起,然后是所有BB和所有CC),而不是将每个都留在level1中。我该如何预防?

非常感谢您

Nath

1 个答案:

答案 0 :(得分:0)

您可以尝试将行ID列添加到数据框中,并将其明确用作分组变量。这样可以防止ggplot()按照fill的美感对条形进行分组:

library(dplyr)

ggplot(df %>% mutate(id = seq(1, n())), 
       aes(y = value, group = id)) +
  geom_col(aes(fill = level1, x = 0), width = .5) + 
  geom_col(aes(fill = level2, x = .25), width = .25) +
  coord_polar(theta = 'y')

plot