寫(xiě)在前面
春節(jié)期間跟家里人聊天的時(shí)候茅诱,再一次提到了小時(shí)候的時(shí)候拆家里手表的事为流。然后又是對(duì)我一陣數(shù)落。孩童時(shí)的我對(duì)這個(gè)結(jié)構(gòu)復(fù)雜让簿、設(shè)計(jì)精巧的玩意充滿(mǎn)了好奇,總是想要機(jī)會(huì)拆開(kāi)看看里面到底裝著什么秀睛。父母知道我的心思自然不敢把手表輕易放在外頭尔当。但機(jī)會(huì)這東西,等一等總會(huì)有的蹂安。終于還是被我逮到了機(jī)會(huì)椭迎。拆開(kāi)容易,拼回去就難了田盈。結(jié)局免不了一頓暴揍畜号,然后被父母記到現(xiàn)在......手表某種程度上代表了人類(lèi)制造工具的某種極致,而拆手表嘛則是小孩子極致的好奇心了允瞧。至于挨揍嘛简软,純屬活該了......扯遠(yuǎn)了。
一個(gè)畫(huà)柱狀圖的插件
本來(lái)我是準(zhǔn)備當(dāng)一個(gè)安靜的鴿子述暂,等陳博士把rserver插件完善了(起碼寫(xiě)一個(gè)可用的交互界面吧)痹升。但,架不住博士小姐姐shawn有特別的姿勢(shì)畦韭。一頓騷操作就把shiny包搞定了疼蛾,加上陳博士寫(xiě)個(gè)網(wǎng)頁(yè)彈出功能,shiny的最后一塊拼圖算是齊了艺配。工頭喊一嗓子察郁,開(kāi)工了......這次的插件主要功能是畫(huà)柱狀圖......柱狀圖算是科研作圖的基礎(chǔ),任何一個(gè)雜志隨便翻翻都能看到柱狀圖转唉。之前也寫(xiě)過(guò)幾篇關(guān)于柱狀圖的文章檢驗(yàn)自己對(duì)R語(yǔ)言的學(xué)習(xí)程度皮钠。新的一年了,正好是時(shí)候檢驗(yàn)一下對(duì)r和ggplot2的認(rèn)識(shí)又到了什么水準(zhǔn)了酝掩。這次鳞芙,我們用shiny折騰了一個(gè)柱狀圖。我才不會(huì)說(shuō)是因?yàn)锽arplot這個(gè)名字看著就會(huì)排在前面呢期虾。如果那樣子原朝,我肯定會(huì)改名叫A barplot了,你細(xì)品镶苞,你仔細(xì)品喳坠。總之這次的插件主要能畫(huà)三種圖茂蚓,分別是帶星號(hào)標(biāo)記的壕鹉,帶字母標(biāo)記的分組柱狀圖和堆積柱狀圖剃幌。
下載地址點(diǎn)這里:Barplot_shiny
PS:輸入文件參考鳶尾花數(shù)據(jù)集。如果你還不清楚晾浴,直接去rstudio里輸入iris就能看到了负乡。大概類(lèi)似下面的結(jié)構(gòu)。
Group | Factor_1 | Factor_2 | ... | Factor_n |
---|---|---|---|---|
Name_1 | value | value | ... | value |
Name_1 | value | value | ... | value |
... | ... | ... | ... | ... |
Name_2 | value | value | ... | value |
Name_2 | value | value | ... | value |
Name_2 | value | value | ... | value |
界面
先從最左邊的菜單開(kāi)始做起脊凰。
左邊側(cè)邊欄第一個(gè)是輸入數(shù)據(jù)的地方抖棘,默認(rèn)CSV文件(既默認(rèn)數(shù)據(jù)以半角逗號(hào)分隔)。然后選擇數(shù)據(jù)是否已經(jīng)整理為透視表狸涌,這個(gè)選項(xiàng)不常用切省。一般默認(rèn)第一列是分組名,如果不是帕胆,第三個(gè)選項(xiàng)可以換一下朝捆。已經(jīng)設(shè)定好會(huì)讀取輸入的文件的列名并自動(dòng)更新到下拉菜單里。
此外懒豹,因?yàn)闆](méi)有改默認(rèn)設(shè)置芙盘,數(shù)據(jù)文件默認(rèn)不超過(guò)5 M。
然后就是選擇是分組柱狀圖或者是堆積圖歼捐,需要星號(hào)標(biāo)記或者是星號(hào)標(biāo)記何陆。這里未來(lái)會(huì)給更多的選項(xiàng)讓你選擇到底用t檢驗(yàn),ANOVA豹储,還是非參數(shù)檢驗(yàn)贷盲。此外標(biāo)記默認(rèn)數(shù)據(jù)服從正態(tài)分布并且滿(mǎn)足方差齊性。未來(lái)可能把對(duì)應(yīng)的檢驗(yàn)也加進(jìn)去(感覺(jué)又在給自己挖坑了)剥扣。另外字母標(biāo)記對(duì)所有的可能性還是沒(méi)做到遍歷巩剖,這部分未來(lái)還需要改進(jìn),希望得到用戶(hù)的反饋钠怯。
# t檢驗(yàn)
stat.test <- dta_barplot %>%
group_by(key) %>%
t_test(value ~ group) #遇事不決t檢驗(yàn)
stat.test <- stat.test %>%
adjust_pvalue(method = "bonferroni") %>%
add_significance("p.adj")
# 兩因素ANOVA(如果需要請(qǐng)自行魔改)
anova <-
aov(value ~ group + key, dta_barplot) #ANOVA
posthoc.test <-
LSD.test(anova, c('group', 'key'), p.adj = 'bonferroni')
posthoc <-
posthoc.test$groups %>%
mutate(name = row.names(.)) %>%
separate(name, into = c("group", "key"), sep = ":")
# 單因素ANOVA
key_name <- dta_barplot %>% distinct(key) %>% .$key
posthoc <- data.frame(
value = double(),
groups = character(),
key = character(),
group = character(),
stringsAsFactors = FALSE
)
for (i in 1:length(key_name)) {
anova <- dta_barplot %>%
filter(key == key_name[i]) %>%
aov(value ~ group, .)
posthoc.test <- anova %>%
LSD.test(., "group", p.adj = 'bonferroni')
posthoc <- posthoc.test$groups %>%
mutate(key = key_name[i],
group = rownames(.)) %>%
bind_rows(., posthoc)
}
第三個(gè)菜單是設(shè)置顏色和主題佳魔,這里集成了ggpubr,ggprism和ggthemes的部分主題晦炊,如果你有更好的鞠鲜,不妨自己加到代碼里。
#set theme
switch(
input$slider_theme,
theme_set(theme_few()),
theme_set(theme_bw()),
theme_set(theme_classic()),
theme_set(theme_pubclean()),
theme_set(theme_pubr()),
theme_set(theme_minimal()),
theme_set(theme_prism())
)
#set palette
mypal <- switch(
input$slider_palette,
pal_npg()(9),
pal_jco()(9),
pal_lancet()(9),
pal_locuszoom()(9),
prism_fill_pal(palette = "prism_light")(9),
prism_fill_pal(palette = "floral")(12),
prism_fill_pal(palette = "prism_dark")(10),
prism_fill_pal(palette = "viridis")(6),
prism_fill_pal(palette = "warm_and_sunny")(10),
prism_fill_pal(palette = "black_and_white")(9)
)
接著是柱子的設(shè)定断国,分別是柱子寬度贤姆,間隔(不一定可設(shè)置),這里設(shè)定誤差線(xiàn)的寬度是柱寬度的1/3稳衬,如果覺(jué)得丑霞捡,請(qǐng)用意志力挺過(guò)去。Y軸最小值薄疚,這個(gè)也是準(zhǔn)備取消的東西碧信,因?yàn)樽兞藭?huì)造成差別很大的錯(cuò)覺(jué)赊琳,想不從0點(diǎn)開(kāi)始請(qǐng)選擇箱線(xiàn)圖。然后是柱形邊框顏色和顏色填充的類(lèi)別砰碴。顏色填充這塊也沒(méi)有覆蓋到所有情況躏筏,所以,在改了在改了......
分面的選項(xiàng)呈枉,嗯寸士。
其實(shí)星號(hào)標(biāo)記的柱狀圖沒(méi)有設(shè)定不分面,如果選否起始是設(shè)定為行數(shù)為1碴卧,固定y軸的分面圖,本人發(fā)際線(xiàn)實(shí)在不夠用了乃正。
另外三個(gè)是facet里比較有意思的選項(xiàng)住册,自行體會(huì)吧。
最后就是X瓮具,Y軸標(biāo)題和標(biāo)簽的標(biāo)題(這個(gè)ggprism填了也不出東西荧飞,神秘,可能有更具體的修改選項(xiàng)吧)名党。這塊沒(méi)有寫(xiě)expression函數(shù)叹阔,估計(jì)是不支持特殊的字符和上下角標(biāo)了......然后就是圖的尺寸,整個(gè)圖(除了字母和星號(hào)標(biāo)記)的字號(hào)传睹,字母和星號(hào)標(biāo)記的尺寸耳幢,標(biāo)簽的位置(起始還可以有個(gè)坐標(biāo)選項(xiàng)的,下次加上吧)和最后的x軸標(biāo)簽角度欧啤。
大概就介紹這么多吧睛藻,想要做的選項(xiàng)還有很多。例如:Y軸的tick邢隧,Y軸是否使用log_scale以及上面提到的......TBtools的界面方面店印,畢竟有shiny了,就這么簡(jiǎn)化著吧......
最后
當(dāng)初學(xué)習(xí)R的動(dòng)力就是想畫(huà)個(gè)柱狀圖倒慧,學(xué)會(huì)后才發(fā)現(xiàn)如果學(xué)R只是為了畫(huà)圖那就買(mǎi)櫝還珠了按摘。R語(yǔ)言提供了從數(shù)據(jù)載入、清洗到統(tǒng)計(jì)分析再到作圖的全套流程纫谅。特別是dplyr提供的整套類(lèi)似thinking flow的數(shù)據(jù)處理流程和purrr簡(jiǎn)化的匿名函數(shù)炫贤,分析數(shù)據(jù)的整個(gè)流程如水流般水到渠成。如果這個(gè)小程序能夠激發(fā)起你學(xué)習(xí)R的興趣系宜,如果你好奇R到底是怎么把數(shù)據(jù)變成圖表的照激,索性就拆開(kāi)這個(gè)包,看看里面的函數(shù)都是做什么的盹牧,最后嘗試自己用R處理數(shù)據(jù)吧俩垃。希望拆開(kāi)這個(gè)小插件后能在里面發(fā)現(xiàn)自己的好奇心励幼。還能孩子多久......
PS:今天用別的電腦打開(kāi)才發(fā)現(xiàn),插件里的中文注釋都是亂碼......我有一句mmp不知當(dāng)講不當(dāng)講