Как найти центры штабелированных элементов адвокатского сословия в ggplot?

Я написал здесь о том, чего я пытаюсь достичь Sankey гистограммы в R

Я решил попробовать реализовать это в ggplot, но моя текущая проблема заключается в следующем: учитывая код ниже, как бы вы пошли о вычислении кривых DF непосредственно из главного df? Можно ли извлечь центры сложенных элементов geom_bar из самого участка?

df <- data_frame(a=factor(c(1,2,1,2)), b=factor(c(3,3,4,4)), y = c(20,22,24,18))
p <- df %>% 
  ggplot(aes(x=a, y=y, group=b, fill=b, width=.3)) + 
  geom_bar(stat="identity", alpha=.9)
p

curves = data_frame(x=c(1,1), xend=c(2,2), 
                    y=c(10, 35), yend=c(30,30), 
                    weight=c(40,40),
                    width=c(10,40),
                    b=NA) 

p + 
  geom_curve(data=curves, 
             aes(x=x, y=y, xend=xend, yend=yend, size=weight), 
             curvature=.2, alpha=.4)

1 ответ

  1. В качестве быстрого примера, как получить центр баров:

    library(tidyverse)
    curves2 <- df %>% 
      group_by(a) %>% 
      mutate(y = cumsum(y) - 0.5 * y) %>% 
      spread(a, y) %>% 
      rename(y = `1`, yend = `2`) %>% 
      mutate(x = 1, xend = 2)
    
    p + geom_curve(data=curves2, 
                 aes(x=x, y=y, xend=xend, yend=yend, fill=NA,group=b), 
                 curvature=.2, alpha=.4, size=12)