2016-03-15 88 views
2

我試圖創建使用layer_lines() ggvis簡單的圖表,並希望有地區在其下面有一個填充顏色填充下整個區域。出於某種原因,當我嘗試了應該能夠做到的最基本的事情時,我得到了不尋常的結果。在ggvis曲線

例如,我嘗試了layer_lines()設置fill,和它結束了看起來像這樣: enter image description here

然後我試圖使用layer_ribbons()fill,它看起來像這樣:

enter image description here

我基本上想要得到與上圖中所得到的完全相反的結果。

這裏是我完整的情節代碼:

valuePlot <- valueTable %>% 
    ggvis(~date, ~revenue) %>% 
    layer_points(fill := "black", opacity := 0, size := 300) %>% 
    layer_lines(fill := "darkgreen", stroke := "darkgreen", strokeWidth := 2) %>% 
    set_options(width = "auto", height = 300, resizable=FALSE) %>% 
    add_axis("x", title= xaxis) %>% 
    add_axis("x", orient = "top", ticks = 0, title = main, title_offset = -5, 
      properties = axis_props(
      axis = list(stroke = "white"), 
      labels = list(fontSize = 0))) %>% 
    add_axis("y", title= yaxis, title_offset = 60) %>% 
    add_tooltip(ttip, "hover") 

我包括在上述的情況下,隨機的事情,我在那裏有原因造成的問題之一。一個更可重複,更簡單的例子將是:

mtcars %>% 
    ggvis(~wt, ~mpg) %>% 
    layer_lines(fill := "darkgreen", stroke := "darkgreen", strokeWidth := 2) %>% 
    set_options(width = "auto", height = 300, resizable=FALSE) %>% 
    add_axis("x", title="x axis") %>% 
    add_axis("y", title="y axis", title_offset = 60) %>% 

任何想法?

回答

0

一般滑稽線由值引起的不被正確排序,因爲它是常見的,以連續的點之間的原始數據被繪製線。在這裏,你可以通過「重量」,然後填寫訂單數據,適當地設置yy2界限,

mtcars %>% 
    dplyr::arrange(wt) %>% 
    ggvis(~wt, ~mpg) %>% 
    layer_ribbons(y = ~mpg, fill := "lightgreen") %>%  # fill above 
    layer_ribbons(y2 = ~min(mpg)-1, fill := "darkgreen" # fill below 

enter image description here

+0

感謝您的回答!在我的實際代碼的情況下,我正在按照有序的日期進行繪圖,所以我不能真正重新排列集合。我將如何將這個例子應用於那個?另外,爲什麼'y2 =〜min(mpg)-1'部分? – NeonBlueHair

0

Layer_ribbons想要一個設定值,一分鐘,它的最大的,可以這麼說。您已經通過在原始ggvis調用中將~revenue映射到y軸來給出它想要的最大值。

但是你需要添加一個y2座標。在你的情況下,你希望y2總是等於0,因爲你希望功能區能夠爲每個數據點下拉到0。

因此,像這樣:

valueTable %>% 
arrange(date) %>% # looks like you've probably already done this 
ggvis(~date, ~revenue) %>% 
layer_ribbons(y2 = 0, fill := 'darkgreen')