在ggvis中动态选择组

Dynamically selecting groups in ggvis

所以我尝试使用 ggvis 可视化以下数据,因为我希望能够查看不同的客户和不同的客户组合。我想使用线图,然后能够 select 两个或三个并同时在图上查看它们。问题是我不能确切地说出我正在查看哪些。每次我尝试一些不同的东西;我 运行 变成了别的东西。见下文,数据名为m3

customer   score    model
a          0.437    1
a          0.471    2
a          0.036    3
b          0.455    1
b          0.371    2
b          0.462    3
c          0.280    1
c          0.042    2
c          0.279    3
d          0.282    1
d          0.470    2
d          0.246    3
e          0.469    1
e          0.500    2
e          0.303    3
f          0.290    1
f          0.387    2
f          0.161    3
g          0.075    1
g          0.111    2
g          0.116    3

尝试 1: 有了这个,我可以看到线条,但是如果 select 有两个客户,我会收到一个奇怪的警告,我无法真正分辨出哪个线属于谁。它还删除了两个客户的第二个 model 观察值。

m3 %>% ggvis(x=~factor(model),y=~score)%>% 
  filter(customer == eval(input_select(choices = as.character(m3$customer),multiple=TRUE,label='Select which Domains to view'))) %>% 
  layer_lines()

尝试 2: 现在我可以大致了解发生了什么。不过还是不对。第二个镜头是 'a' 和 'c' selected。

m3 %>% ggvis(x=~factor(model),y=~score)%>% 
  filter(customer == eval(input_select(choices = as.character(m3$customer),multiple=TRUE,label='Select which Domains to view'))) %>% 
  layer_lines() %>% layer_text(text:= ~customer)

我还是没弄对。我还尝试将 add_legendlayer_linesstroke 参数一起使用,看看我是否可以获得图例来显示哪些客户已被 select 不同的颜色和然后将带有颜色和相应名称的图例放在一边,但这根本不起作用。这对 ggvis 来说太多了吗?还是我完全错过了什么?

试试这个:

m3 %>% 
      #group by customer in order to separate them
      group_by(customer) %>% 
      #the normal ggvis call
      ggvis(x=~factor(model),y=~score) %>%
      #filter in the same way that you did 
      #but add unique in order to pick one customer 
      #also make sure you use %in% instead of == in order to 
      #select multiple customers. == was the reason for the warning you received
      #in your code
      filter(customer %in% eval(input_select(choices = unique(as.character(m3$customer)),
                                             multiple=TRUE,
                                             label='Select which Domains to view'))) %>%
      #add layer_paths with the stroke argument in order for
      #different customers to have different colours (and a legend)
      layer_paths(stroke = ~customer)

输出:

正如您在图片中看到的,您有一个包含所有客户的图例,并且您可以看到绘制的三个选定客户(b、c 和 d)。情节将根据您的选择每次更改。我还使用 layer_paths 而不是 layer_lines,因为我发现它效果更好。