我试图使用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)
到目前为止,没有运气。我怀疑我错过了一些简单的解决方案......
答案 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)仅适用于原子和列表类型
猜猜我得继续努力。