我正在尝试使用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)到目前为止,还没有什么好消息。我怀疑我错过了一些简单的解决方案...
发布于 2016-08-03 15:49:08
I‘t ggvis允许您在与正数据相同的组中生成具有负值的堆叠条形图。
这是因为如果一个x值在数据中出现不止一次,那么ggvis将对每个x处的y值求和。我以为既然你绘制了向量1:3,它们就会被抵消,但事实并非如此。
到目前为止,我不相信有躲避条形图的存在。它还会弄乱标签。
您可以生成非堆叠的绘图,同时填充位置。
df %>%
group_by(direction) %>%
ggvis(x=~x, y=~value, fill = ~direction) %>%
layer_bars(stack = FALSE)无论如何,您可能会考虑避免使用ggvis进行任何生产工作,因为它还处于开发阶段,并且已经有几个月没有更新了。
发布于 2016-08-04 07:32:08
@shayaa谢谢,这看起来确实很有效,尽管它可能需要一些调整,而且看起来可能不像我使用ggplot2那样好。实际上,我之所以使用ggvis,是因为我想把它和shiny结合起来,做一个小型的交互式web版本。例如:
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),环境,包含):比较(1)仅适用于原子类型和列表类型
我想我还得继续尝试。
https://stackoverflow.com/questions/38734393
复制相似问题