ggvis包学习笔记之交互

个人感觉:交互是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"))

ggvis包学习笔记之交互_第1张图片

#函数使用
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)

ggvis包学习笔记之交互_第2张图片

#函数使用
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)
            }
        )
    )

ggvis包学习笔记之交互_第3张图片

#函数使用
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()

ggvis包学习笔记之交互_第4张图片

#函数使用
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()

ggvis包学习笔记之交互_第5张图片

#函数使用
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"))

ggvis包学习笔记之交互_第6张图片

#函数使用
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()

ggvis包学习笔记之交互_第7张图片

#函数使用
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

你可能感兴趣的:(r,可视化,数据可视化,ggplot2)