ggvis包學習筆記之交互

我的感受:交互是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

下面就一一講解每一個函數如何使用,每一個函數上來先亮代碼和圖片,後面是代碼的參數解釋以及返回值或許還有注意事項等。每一個函數的參數都不會一一講解,只講解一下經常使用參數。並且這幾個函數有共有參數,共有的參數只說明其中一個。函數

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)

參數解釋: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參數我的建議在通常做圖時就不要設置了。

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

相關文章
相關標籤/搜索