ggvis - 如何在条形图中显示不同的变量,并动态选择任何一个或多个变量

时间:2014-12-28 17:30:01

标签: r bar-chart ggvis

我有这个data.frame:

    Campanas1     variable     sessions
1   Adwords       sumResults    69
2   Campa�as     sumResults     2
3   Directo       sumResults    10947
4   Email         sumResults    413
5   Referencias   sumResults    12991
6   SEO           sumResults    37693
7   Social Media  sumResults    5993
8   Others        sumResults    2

我用这段代码制作了一个条形图:

Sesiones_Campanas1 %>% ggvis(~Campanas1, ~sessions, fill := "red") %>% layer_bars()

问题:如何为每个/所有来源(来自Campanas1)设置一个选择器?

我的尝试:

Sesiones_Campanas1 %>% ggvis(~Campanas1, ~sessions, fill := "red") %>%   layer_bars(input_select(label = "Fuente"),
                                                                              choices = c("Email", 
                                                                                "Directo", "Adwords",
                                                                                "Campanas1", "Referencias", "SEO",
                                                                                "Social Media"))

但是我收到了这个错误:

Error: length(x) not equal to 1

This is what i want, but with interactivity

1 个答案:

答案 0 :(得分:1)

经过相当多的研究,我认为我做到了。困难的部分是在下拉菜单中包含All-rows部分。所以,在这里:

首先,您需要2个库来执行此操作:dplyrstringi

library(dplyr)
library(stringi)

selector <- c('Adwords', 'Campanas', 'Directo', 'Email',  'Others', 'Referencias', 'SEO', 'Social_Media', 'All' = 'Adwords_Campanas_Directo_Email_Others_Referencias_SEO_Social_Media' ) 
#the selector is a vector to include all your choices

实际所需的代码:

Sesiones_Campanas1  %>%  #the table
  ggvis(~Campanas1, ~sessions, fill := "red") %>% #the ggvis object
  filter(stri_detect_fixed(eval(input_select(choices=selector, label='Fuente' )) , Campanas1) ) %>%   #the difficult part. You need to use filter and stri_detect_fixed with the input select to get exactly what you need.
  layer_bars() #plot bars

我无法上传交互式图表(我认为),因此我会上传静态all图表(但您可以看到下拉框及其中的所有选项)。

P.S。如果x轴标签不能正确显示,那是因为你需要增加图形尺寸(适用于Rstudio和浏览器)

PS2关于filter行如何工作的几句话:您需要evalinput_select结果评估为字符串,以便它可以与{{1}匹配功能。 stri_detect_fixed然后决定要使用哪些行。

那就是它!

enter image description here

<强>更新

为了拥有所有&#39;在开头选择的源需要指定filter参数,如下所示:

selected

希望这会有所帮助!!