将标签添加到堆积条形图 - ggvis

3
有没有办法在 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") 

输出结果:

enter image description here

期望的输出结果 - 如何修改上面的图表以添加标签到各个堆栈中?:

enter image description here


就我个人而言,我不认为有必要重复相同的信息。 - user3710546
2
同意,@Pascal,这是多余的。然而,有些受众更喜欢这种方式。 - astrosyam
1个回答

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) 

enter image description here


1
谢谢!这个方法可行。至于百分号%,我创建了一个新的列labelText = paste(value, "%"),并将其用于layer_text(....text:=~ labelText)。 - astrosyam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接