个人感觉:交互是ggvis包最大的特点,第二大特点是利用%>%可以无缝衔接dplyr包。
ggvis的交互功能是基于shiny的,如果用R但是还不知道什么是shiny,那就去看看吧。虽然我也不是很熟,但是我知道R的海洋里有个叫shiny的东西。ggvis现在支持的shiny组件有限,主要有:input_slider()
,input_checkbox()
,input_checkboxgroup()
,input_numeric()
,input_text()
,input_radiobuttons()
,input_select()
。这些组件与shiny的原生组件类似,但是参数用法或多或少有一些不同,功能一般都是收到限制的。如果没有接触过shiny那就直接学习每个组件或者函数是如何使用的也就够了。
下面就一一讲解每个函数如何使用,每个函数上来先亮代码和图片,后面是代码的参数解释以及返回值或许还有注意事项等。每个函数的参数都不会一一讲解,只讲解一下常用参数。而且这几个函数有共有参数,共有的参数只说明其中一个。
1.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)
参数解释:
min/max:滑块最小值/最大值。
value:滑块默认值(默认是最大值和最小值的平均数)。
step:移动滑块时的步长。
ticks:是否显示刻度。
sep:千分位分隔符,默认是逗号。
pre/post:数值前/后缀字符串。
label:控件显示的标签名。
id:此次输入的特异ID,通常自动产生。
map:接受一个参数(控件在客户端接受的值)的函数,返回一个修改过的值。这个后面有的函数用到了,到下面再看例子吧。
注意:
添加了pre/post那么返回值是不是就添加了相应的字符串,答案是不是。不行你将上例中的size设置为"pre_300_post"是不显示点的,但是设置为"300"和300是可以的。
id参数个人建议在一般作图时就不要设置了。
2.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也是可以的。
3.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的是字符串向量。自己试一试选择不同值时打印出来的情况。
4.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进行改变,不过允许手动输入。
5.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()
例子的写法有何不同,二者都是可以的。
6.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()
, 不过必须选且只能选择一个值。
7.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