我的感受:交互是ggvis包最大的特色,第二大特色是利用%>%能够无缝衔接dplyr包。html
ggvis的交互功能是基于shiny的,若是用R可是还不知道什么是shiny,那就去看看吧。虽然我也不是很熟,可是我知道R的海洋里有个叫shiny的东西。ggvis如今支持的shiny组件有限,主要有:input_slider()
,input_checkbox()
,input_checkboxgroup()
,input_numeric()
,input_text()
,input_radiobuttons()
,input_select()
。这些组件与shiny的原生组件相似,可是参数用法或多或少有一些不一样,功能通常都是收到限制的。若是没有接触过shiny那就直接学习每一个组件或者函数是如何使用的也就够了。ide
下面就一一讲解每一个函数如何使用,每一个函数上来先亮代码和图片,后面是代码的参数解释以及返回值或许还有注意事项等。每一个函数的参数都不会一一讲解,只讲解一下经常使用参数。并且这几个函数有共有参数,共有的参数只说明其中一个。函数
input_slider()
# 做图代码 library(ggvis) mtcars %>% ggvis(~wt, ~mpg) %>% layer_smooths(span = input_slider(0.5, 1, value = 1, step=0.1)) %>% layer_points(size := input_slider(100, 1000, value = 100, ticks=F, pre="pre_", post="_post"))
#函数使用 input_slider(min, max, value = (min + max)/2, step = NULL, round = FALSE, format = NULL, locale = "us", ticks = TRUE, animate = FALSE, sep = ",", pre = NULL, post = NULL, label = "", id = rand_id("slider_"), map = identity)
参数解释:post
min/max:滑块最小值/最大值。学习
value:滑块默认值(默认是最大值和最小值的平均数)。flex
step:移动滑块时的步长。spa
ticks:是否显示刻度。code
sep:千分位分隔符,默认是逗号。component
pre/post:数值前/后缀字符串。orm
label:控件显示的标签名。
id:这次输入的特异ID,一般自动产生。
map:接受一个参数(控件在客户端接受的值)的函数,返回一个修改过的值。这个后面有的函数用到了,到下面再看例子吧。
注意:
添加了pre/post那么返回值是否是就添加了相应的字符串,答案是否是。不行你将上例中的size设置为"pre_300_post"是不显示点的,可是设置为"300"和300是能够的。
id参数我的建议在通常做图时就不要设置了。
input_checkbox()
model_type <- input_checkbox(label = "Use flexible curve", map = function(val) if(val) "loess" else "lm") mtcars %>% ggvis(~wt, ~mpg) %>% layer_model_predictions(model = model_type)
#函数使用 input_checkbox(value = FALSE, label = "", id = rand_id("checkbox_"), map = identity)
参数解释:
value:初始值,TRUE或者FALSE。
其余参数就不用我多说了吧。
注意:
返回值是TRUE
或者FALSE
。
注意例子这种写法,直接把input_checkbox这个赋值给model也是能够的。
input_checkboxgroup()
# mtcars %>% ggvis(x = ~wt, y = ~mpg) %>% # layer_points( # fill := input_checkboxgroup( # choices = c("Red" = "r", "Green" = "g", "Blue" = "b"), # selected = 'r', # label = "Point color components", # map = function(val) { # print(val) #我添加了打印出val变量,能够理解传递的变量究竟是什么。 # rgb(0.8 * "r" %in% val, 0.8 * "g" %in% val, 0.8 * "b" %in% val) # } # ) # ) mtcars %>% ggvis(x = ~wt, y = ~mpg) %>% layer_points( fill := input_checkboxgroup( choices = c("Red" = 1, "Green" = 2, "Blue" = 3), label = "Point color components", selected = 1, map = function(val) { print(val) #我添加了打印出val变量,能够理解传递的变量究竟是什么。 rgb(0.8 * 1 %in% val, 0.8 * 2 %in% val, 0.8 * 3 %in% val) } ) )
#函数使用 input_checkboxgroup(choices, selected = NULL, label = "", id = rand_id("radio_"), map = identity)
参数解释:
choices:包含可选值的list,若是元素都是命名的(就像例子中这样),那么显示出来的就是名字,而不是value。
selected:初始选择的值,对于本函数---多选框,为NULL时默认不选。对于后面有单选模式的,NULL时默认选择第一个。
注意:
我在map参数中添加了一条打印语句,可见,传递给map的是字符串向量。本身试一试选择不一样值时打印出来的状况。
input_numeric()
mtcars %>% ggvis(~wt, ~mpg, size := input_numeric(label = "Point size", value = 25)) %>% layer_points()
#函数使用 input_numeric(value, label = "", id = rand_id("numeric_"), map = identity)
参数解释:
value:初始值,能够设置为小数,可是经过上下箭头改变数值时仍是会变成整数,这时步长不为1,变为整数后步长为1。
注意:
返回值为长度为1的整数向量。
在灵活性上不如input_slider()
,只能提供一个初始值,而后按照步长为1进行改变,不过容许手动输入。
input_text()
fill_text <- input_text(label = "Point color", value = "red") mtcars %>% ggvis(~wt, ~mpg, fill := fill_text) %>% layer_points()
#函数使用 input_text(value, label = "", id = rand_id("text_"), map = identity)
参数解释:
value:初始值。
注意:
返回值为长度为1的字符向量。
注意本例的写法与input_numeric()
例子的写法有何不一样,两者都是能够的。
input_radiobuttons()
mtcars %>% ggvis(~wt, ~mpg) %>% layer_model_predictions(model = input_radiobuttons( choices = c("Linear" = "lm", "LOESS" = "loess"), selected = "loess", label = "Model type"))
#函数使用 input_radiobuttons(choices, selected = NULL, label = "", id = rand_id("radio_"), map = identity)
参数解释:
selected:为NULL时,默认选择第一个。
注意:
相似于input_checkboxgroup()
, 不过必须选且只能选择一个值。
input_select()
mtcars %>% ggvis(x = ~wt, y = input_select(names(mtcars), map = as.name)) %>% layer_points()
#函数使用 input_select(choices, selected = NULL, multiple = FALSE, label = "", id = rand_id("select_"), map = identity, selectize = FALSE)
参数解释:
multiple:是否能够选择多个。
selected:可选多个时,设置为NULL默认不选。不能够多选时,设置为NULL,默认选择第一个。
selectize:是否使用selectize.js。至于这个是啥能产生什么效果,你就多试试吧。
注意:
若是你想选择变量名,你须要利用map参数将输入的输出转换为一个name。就像例子中这样。
本文内容主要来自:
http://ggvis.rstudio.com/ggvi...
http://ggvis.rstudio.com