2015-10-21 2 views
5

Используя этот небольшой набор данных:R Горизонтальная Stacked ggvis Barplot

df <- structure(list(colour = structure(c(1L, 2L, 1L, 2L), .Label = c("Black", 
"White"), class = "factor"), variable = c("A", "A", "B", "B"), 
    value = c(1, 2, 0.74, 0.85)), row.names = c(NA, -4L), .Names = c("colour", 
"variable", "value"), class = "data.frame") 

Я могу легко создать вертикальную сложены barplot с ggvis

library(ggvis) 
df %>% 
    ggvis(x=~variable, y=~value, fill=~colour) %>% 
    group_by(colour) %>% 
    layer_bars() 

enter image description here

Но я не могу понять, как иметь горизонтальный штабелированный планшет. Я думаю, что я как-то должен использовать layer_rects, но лучшее, что я мог донести, было всего лишь одной группой.

df %>% 
    ggvis(x =~value, y=~variable, fill =~ colour) %>% 
    group_by(colour) %>% 
    layer_rects(x2 = 0, height = band()) 

enter image description here

ответ

6

Это потому, что layer_bars() стек автоматически, layer_rects() не делает. Вы должны быть в явном виде об стеках, используя compute_stack().

df %>% 
    ggvis(y = ~variable, fill = ~colour) %>% 
    compute_stack(stack_var = ~value, group_var = ~variable) %>% 
    layer_rects(x = ~stack_lwr_, x2 = ~stack_upr_, height = band()) 

Что дает:

enter image description here


Примечание: Глядя на этот код, вы можете спросить, где stack_lwr_ и stack_upr_ аргументы берутся. Взгляните на source code, чтобы увидеть, как он работает под капотом.

+1

Отлично, именно то, что мне нужно. благодаря – cdeterman