ggvis - 条形图的交互式X轴

时间:2015-06-28 16:55:43

标签: r shiny ggvis

我正在研究使用ggvis构建一个闪亮的应用程序。 为此,我使用了一个名为“company”的小数据集。它包含每行代表的员工数据和员工。

从ggvis的角度来看,我正在尝试以下方面: 创建显示以下变量分布的条形图:

  • 年龄
  • 作用

不使用以下代码创建三个不同的条形图:

#Barcharts - Role
company %>% ggvis(~Role,opacity := 0.8, fill:= "firebrick") %>%
  layer_bars() %>%
  scale_ordinal('x', domain=c('Analyst','Consultant','Software Engineer','Manager','Director'))

#Barcharts - Age
company %>% ggvis(~Age,opacity := 0.8, fill:= "firebrick") %>%
  layer_bars()

#Barcharts - Sex
company %>% ggvis(~Sex,opacity := 0.8, fill:= "firebrick") %>%    
  layer_bars()

我想创建一个允许输入选择器的ggvis条形图。

我尝试过以下代码:

company %>% ggvis(input_select(c("Sex","Role","Age"), map = as.name)) %>% layer_bars()

返回以下错误:

Error: Visual property x.update is not a variable

使用的数据是:

raw <- "Age Sex Role
35   M          Director
37   M          Director
30   M           Manager
28   M           Manager
28   F           Manager
27   M Software_Engineer
25   M        Consultant
26   M        Consultant
25   F           Analyst
25   M           Analyst
25   M           Analyst
25   M           Analyst
25   M           Analyst
25   M           Analyst
25   F           Analyst
25   F           Analyst
25   F           Analyst
24   F           Analyst
25   M           Analyst"


company = read.table(textConnection(raw), header=TRUE)

这让我相信ggvis不允许x变量成为输入选择器项。它是否正确?有解决方案吗?

提前谢谢你。 亲切的问候

1 个答案:

答案 0 :(得分:8)

首先,你需要melt你的data.frame:

library(reshape2)
company <- melt(company, measure.vars=c('Role','Age','Sex'))

然后以下内容对我有用:

#Barcharts - Age
company %>% ggvis(~value, opacity := 0.8) %>%
  #use filter to pick only the category you want
  filter(variable == eval(input_select(choices=c('Role','Age','Sex')))) %>%
  layer_bars()

我无法上传交互式版本,但情节如下:

enter image description here

你可以选择你喜欢的类别