首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggvis barplot:负值

ggvis barplot:负值
EN

Stack Overflow用户
提问于 2016-08-03 12:24:56
回答 2查看 144关注 0票数 1

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

然而,当我在ggvis中尝试类似的东西时,我基本上没有得到任何图形,只有一些奇怪的线条。

示例数据:

代码语言:javascript
复制
df <- data.frame(
direction=rep(c("up", "down"), each=3),
value=c(1:3, -c(1:3)),
x=rep(c("A", "B", "C"), 2))

对于所有正值,这都是有效的:

代码语言:javascript
复制
df %>%
mutate(value.pos=abs(value)) %>%
ggvis(x=~x, y=~value.pos) %>%
group_by(direction) %>%
layer_bars(stack=TRUE)

这并没有给我带来任何好处:

代码语言:javascript
复制
df %>%
ggvis(x=~x, y=~value) %>%
group_by(direction) %>%
layer_bars(stack=TRUE)

我还尝试了逐个绘制它们的各种组合,例如:

代码语言:javascript
复制
df %>%
spread(key=direction, value=value) %>%
ggvis(x=~x, y=~up) %>%
layer_bars() %>%
layer_bars(x=~x, y=~down)

到目前为止,还没有什么好消息。我怀疑我错过了一些简单的解决方案...

EN

回答 2

Stack Overflow用户

发布于 2016-08-03 15:49:08

I‘t ggvis允许您在与正数据相同的组中生成具有负值的堆叠条形图。

这是因为如果一个x值在数据中出现不止一次,那么ggvis将对每个x处的y值求和。我以为既然你绘制了向量1:3,它们就会被抵消,但事实并非如此。

到目前为止,我不相信有躲避条形图的存在。它还会弄乱标签。

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

代码语言:javascript
复制
df %>%
  group_by(direction) %>%
  ggvis(x=~x, y=~value, fill = ~direction) %>%
  layer_bars(stack = FALSE)

无论如何,您可能会考虑避免使用ggvis进行任何生产工作,因为它还处于开发阶段,并且已经有几个月没有更新了。

票数 0
EN

Stack Overflow用户

发布于 2016-08-04 07:32:08

@shayaa谢谢,这看起来确实很有效,尽管它可能需要一些调整,而且看起来可能不像我使用ggplot2那样好。实际上,我之所以使用ggvis,是因为我想把它和shiny结合起来,做一个小型的交互式web版本。例如:

代码语言:javascript
复制
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)仅适用于原子类型和列表类型

我想我还得继续尝试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38734393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档