Добавление меток к столбчатым диаграммам с накоплением - ggvis

Есть ли способ добавить метки к столбчатым диаграммам в ggvis?

Пример кода:

plotData = data.frame(v1    = c("ABC", "ABC", "ABC", "XYX","XYX","XYX"), 
                      v2    = c("A"  , "B"  , "C"  , "X"  ,"Y"  ,"Z"  ),
                      value = c(30   ,  60  , 10   ,  20  , 40  , 40  ))

plotData %>%
  ggvis(y = ~v1, fill = ~v2) %>%
  compute_stack(stack_var = ~value, group_var = ~ v1) %>% 
  layer_rects(x = ~stack_lwr_, x2 = ~stack_upr_, height = band()) %>%
  add_axis("y", title = "Variable") %>%
  add_axis("x", title = "Percentage") 

Вывод графика:

введите здесь описание изображения

Предпочитаемый результат. Как изменить приведенную выше диаграмму, чтобы добавить метки к отдельным стопкам? :

введите здесь описание изображения


person astrosyam    schedule 18.02.2016    source источник
comment
Лично я не вижу необходимости повторять одну и ту же информацию.   -  person    schedule 18.02.2016
comment
согласен, это избыточно @Pascal. Тем не менее, некоторые зрители предпочитают именно этот путь.   -  person astrosyam    schedule 18.02.2016


Ответы (1)


Это не идеальное решение, но я все равно опубликую его, так как это может дать вам путь вперед.

По сути, я создаю новый столбец, чтобы указать положение метки, и использую его для размещения текста на графике.

Однако я еще не понял, как поставить % на метки.

library(ggvis)

plotData = data.frame(v1    = c("ABC", "ABC", "ABC", "XYX","XYX","XYX"), 
                      v2    = c("A"  , "B"  , "C"  , "X"  ,"Y"  ,"Z"  ),
                      value = c(30   ,  60  , 10   ,  20  , 40  , 40  ))

library(dplyr)

## This can be shortened, but I'm leaving it as is to show the steps
plotData <- plotData %>%
  group_by(v1) %>%
  mutate(cs = cumsum(value)) %>%
  mutate(pos = ifelse(is.na(cs - lag(cs)), cs, (cs - lag(cs)))) %>%
  mutate(pos = cs - (pos/2)) %>%
  ungroup

plotData %>%
  ggvis(y = ~v1, fill = ~v2) %>%
  compute_stack(stack_var = ~value, group_var = ~ v1) %>% 
  layer_rects(x = ~stack_lwr_, x2 = ~stack_upr_, height = band()) %>%
  add_axis("y", title = "Variable") %>%
  add_axis("x", title = "Percentage") %>%
  layer_text(x = prop("x", ~pos),
             y = prop("y", ~v1, scale = "ycenter"),
             text:=~value, fill := "white", fontSize:=20) 

введите здесь описание изображения

person tospig    schedule 18.02.2016
comment
Спасибо! это сработает. Что касается %, я создал новый столбец labelText = paste(value, %) и использовал его для layer_text(....text:=~ labelText) - person astrosyam; 19.02.2016