ggvis barplot:负值

时间:2016-08-03 04:24:56

标签: r bar-chart ggvis

我试图使用ggvis绘制条形图,对于某些数据,每个变量我都有负值和正值。它类似于ggplot2中的this示例。

然而,当我在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)
到目前为止,没有运气。我怀疑我错过了一些简单的解决方案......

2 个答案:

答案 0 :(得分:0)

我没有ggvis可以让您在与正数据相同的组内生成负值的叠加条形图。

这是因为如果x值在数据中出现多次,那么ggvis将对每个x处的y值求和。我曾经想过,既然你绘制了矢量1:3,他们就会取消,但情况并非如此。

截至目前,我不相信为此存在躲避的条形图。它也与标签混淆。

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

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

无论如何,您可能会考虑避免ggvis用于任何生产工作,因为它正在开发中,并且在几个月内没有更新。

答案 1 :(得分: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中的错误(替换(expr),envir,enclos):   比较(1)仅适用于原子和列表类型

猜猜我得继续努力。