2016-08-03 81 views
1

我想绘制一个使用ggvis的barplot,对于某些数据,对于每个变量我都有一个负值和一个正值。它将类似于ggplot2的this例子。ggvis barplot:负值

但是,当我在ggvis中尝试类似的东西时,我最终基本上没有任何情节,只有一些奇怪的线条。

示例数据:

df <- data.frame(
direction=rep(c("up", "down"), each=3), 
value=c(1:3, -c(1:3)), 
x=rep(c("A", "B", "C"), 2)) 

这工作,对所有正值:

df %>% 
mutate(value.pos=abs(value)) %>% 
ggvis(x=~x, y=~value.pos) %>% 
group_by(direction) %>% 
layer_bars(stack=TRUE) 

这给我什么:

df %>% 
ggvis(x=~x, y=~value) %>% 
group_by(direction) %>% 
layer_bars(stack=TRUE) 

我也试着绘制的各种组合他们一个接一个,例如:

df %>% 
spread(key=direction, value=value) %>% 
ggvis(x=~x, y=~up) %>% 
layer_bars() %>% 
layer_bars(x=~x, y=~down) 

到目前为止,没有运气。我怀疑我错过了一些简单的解决方案...

回答

0

我不ggvis让你产生积极的数据在相同的组内的负值的堆积条形图。

这是因为如果一个x值在数据中出现多次,那么ggvis会在每个x处总结y值。我曾想过,既然你绘制了矢量1:3,他们取消了,但事实并非如此。

截至目前,我不认为存在这样的躲闪条形图。它也与标签混淆。

您可以在填充位置时生成未堆叠的图。

df %>% 
    group_by(direction) %>% 
    ggvis(x=~x, y=~value, fill = ~direction) %>% 
    layer_bars(stack = FALSE) 

不管怎么说,你可能会考虑避免任何生产工作ggvis,因为它正在开发中,并没有在几个月内被更新。

0

@shayaa 谢谢,这似乎工作,虽然它可能需要一些调整,并且可能不像我使用ggplot2一样好看。其实,我使用ggvis的原因,是因为我想将它与闪亮结合起来,制作出一个小型的互动网络版本。例如:

df <- data.frame(
    direction=rep(c("up", "down"), each=3), 
    value=c(1:3, -c(1:3)), 
    x=rep(c("A", "B", "C"), 2)) 

plot_fct <- function(letter) { 
    df %>% 
     filter(x==letter) %>% 
     ggvis(x=~x, y=~value, fill = ~direction) %>% 
     layer_bars(stack = FALSE) %>% 
     scale_numeric("y", domain=c(NA,NA)) 
} 

ui <- fluidPage(
    sidebarPanel(
     selectInput("letter", "Choose letter", c("A", "B", "C"), selected="A") 
    ), 
    mainPanel(
     ggvisOutput("letter_barplot") 
    ) 
) 

server <- function(input, output) { 
    plot_fct(letter=reactive(input$letter)) %>% bind_shiny("letter_barplot") 
} 
runApp(shinyApp(ui, server)) 

但是,无论如何,它似乎并不适用于我,因为类字符的反应性存在一些问题。我不断收到错误:

错误的eval(替代(表达式),ENVIR,enclos): 比较(1)可能仅适用于原子和列表类型

想我得继续努力。

+0

绝对。希望这个软件包很快就会有一些更新。同时,您可以单击我答案旁边的复选标记来表示此问题已解决。 – shayaa