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