用ggvis填充曲线下的整个区域

时间:2016-03-15 01:42:59

标签: r plot shiny data-visualization ggvis

我正在尝试使用layer_lines()在ggvis中创建一个简单的图表,并希望其下方的区域具有填充颜色。出于某种原因,当我尝试应该能够做到的最基本的事情时,我会得到不寻常的结果。

例如,我尝试为fill设置layer_lines(),结果看起来像这样: 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) %>%

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

通常,有趣的行是由未正确排序的值引起的,因为在原始数据中的连续点之间绘制线条是很常见的。在这里,您可以通过&#34; wt&#34;来订购数据。然后填写,适当设置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

答案 1 :(得分:0)

Layer_ribbons想要一组值,即min和max,可以这么说。您已经通过将~revenue映射到原始ggvis调用中的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')