2016-08-03 50 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