如何在双y轴图中对齐ggvis中的条形图和折线图?

时间:2014-10-13 09:34:35

标签: r bar-chart linechart ggvis multiple-axes

使用以下代码:

library(ggvis)
library(dplyr)
mydf2 <- iris %>%
  group_by(Species) %>%
  summarize(Sepal.Length = mean(Sepal.Length),
            Sepal.Width = mean(Sepal.Width)) 

mydf2 %>% as.data.frame()  %>% 
  ggvis(x = ~ Species, y = ~ Sepal.Length ) %>%
  layer_bars(fillOpacity := 0.1 ) %>%
  add_axis("y", "ywidth", orient = "right", grid = FALSE) %>%
  layer_lines(prop("y", ~ Sepal.Width, scale = "ywidth")) %>%
  add_axis('x', title='the species', properties = axis_props(labels=list(fill='blank'))) %>%
  add_axis('x', 'myx2', orient='bottom', title='') %>%
  layer_lines(prop("x", ~ Species, scale = "myx2"), stroke := 'blank')

输出:

enter image description here

我的问题是:

  • 有没有人知道如何在这个双y轴图上对齐条形图和折线图?我希望两个图表的刻度线在x轴上对齐。

修改

我决定编辑这个问题并提供一个更好的例子来说明问题。

1 个答案:

答案 0 :(得分:1)

经过大约4个月的研究并进行了一些研究后,我找到了解决这个问题的方法,尽管它有点像黑客:

mydf2 %>% as.data.frame() %>% mutate(Species2= as.numeric(Species)) %>% 
  ggvis(x = ~ Species2, y = ~ Sepal.Length ) %>%
  layer_bars(fillOpacity := 0.1, width = 0.9 ) %>%
  add_axis("y", "ywidth", orient = "right", grid = FALSE) %>%
  layer_lines(prop("y", ~ Sepal.Width, scale = "ywidth")) %>%
  add_axis('x', title='the species', properties = axis_props(labels=list(fill='blank'))) %>%
  add_axis('x', 'myx2', orient='bottom', title='', grid=F) %>%
  layer_lines(prop("x", ~ Species, scale = "myx2"), stroke := 'blank') 

<强>输出

enter image description here

上述答案的理由是,为了使线和条形图对齐,x轴需要是数字。所以,我做了一个新的分类x轴,用于绘制一条不可见的线(检查最后两行代码)。结果不是最优的,但它确实有效。

您也可以查看this回答。

P.S。该问题的示例代码来自github上的this帖子。上面已经(幸运地)提出了一个问题。如果它得到修复(或者有办法解决这个问题),我会更新答案。