自拆机械表始

写在前面

春节期间跟家里人聊天的时候,再一次提到了小时候的时候拆家里手表的事。然后又是对我一阵数落。孩童时的我对这个结构复杂、设计精巧的玩意充满了好奇,总是想要机会拆开看看里面到底装着什么。父母知道我的心思自然不敢把手表轻易放在外头。但机会这东西,等一等总会有的。终于还是被我逮到了机会。拆开容易,拼回去就难了。结局免不了一顿暴揍,然后被父母记到现在......手表某种程度上代表了人类制造工具的某种极致,而拆手表嘛则是小孩子极致的好奇心了。至于挨揍嘛,纯属活该了......扯远了。

一个画柱状图的插件

本来我是准备当一个安静的鸽子,等陈博士把rserver插件完善了(起码写一个可用的交互界面吧)。但,架不住博士小姐姐shawn有特别的姿势。一顿骚操作就把shiny包搞定了,加上陈博士写个网页弹出功能,shiny的最后一块拼图算是齐了。工头喊一嗓子,开工了......这次的插件主要功能是画柱状图......柱状图算是科研作图的基础,任何一个杂志随便翻翻都能看到柱状图。之前也写过几篇关于柱状图的文章检验自己对R语言的学习程度。新的一年了,正好是时候检验一下对r和ggplot2的认识又到了什么水准了。这次,我们用shiny折腾了一个柱状图。我才不会说是因为Barplot这个名字看着就会排在前面呢。如果那样子,我肯定会改名叫A barplot了,你细品,你仔细品。总之这次的插件主要能画三种图,分别是带星号标记的,带字母标记的分组柱状图和堆积柱状图。

下载地址点这里:Barplot_shiny

PS:输入文件参考鸢尾花数据集。如果你还不清楚,直接去rstudio里输入iris就能看到了。大概类似下面的结构。

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

界面

image.png

先从最左边的菜单开始做起。

image.png

左边侧边栏第一个是输入数据的地方,默认CSV文件(既默认数据以半角逗号分隔)。然后选择数据是否已经整理为透视表,这个选项不常用。一般默认第一列是分组名,如果不是,第三个选项可以换一下。已经设定好会读取输入的文件的列名并自动更新到下拉菜单里。

此外,因为没有改默认设置,数据文件默认不超过5 M。

然后就是选择是分组柱状图或者是堆积图,需要星号标记或者是星号标记。这里未来会给更多的选项让你选择到底用t检验,ANOVA,还是非参数检验。此外标记默认数据服从正态分布并且满足方差齐性。未来可能把对应的检验也加进去(感觉又在给自己挖坑了)。另外字母标记对所有的可能性还是没做到遍历,这部分未来还需要改进,希望得到用户的反馈。

# t检验

stat.test <- dta_barplot %>%

  group_by(key) %>%

  t_test(value ~ group) #遇事不决t检验

stat.test <- stat.test %>%

  adjust_pvalue(method = "bonferroni") %>%

  add_significance("p.adj")

# 两因素ANOVA(如果需要请自行魔改)

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)

}

第三个菜单是设置颜色和主题,这里集成了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)

)

接着是柱子的设定,分别是柱子宽度,间隔(不一定可设置),这里设定误差线的宽度是柱宽度的1/3,如果觉得丑,请用意志力挺过去。Y轴最小值,这个也是准备取消的东西,因为变了会造成差别很大的错觉,想不从0点开始请选择箱线图。然后是柱形边框颜色和颜色填充的类别。颜色填充这块也没有覆盖到所有情况,所以,在改了在改了......

image.png

分面的选项,嗯。

其实星号标记的柱状图没有设定不分面,如果选否起始是设定为行数为1,固定y轴的分面图,本人发际线实在不够用了。

另外三个是facet里比较有意思的选项,自行体会吧。

最后就是X,Y轴标题和标签的标题(这个ggprism填了也不出东西,神秘,可能有更具体的修改选项吧)。这块没有写expression函数,估计是不支持特殊的字符和上下角标了......然后就是图的尺寸,整个图(除了字母和星号标记)的字号,字母和星号标记的尺寸,标签的位置(起始还可以有个坐标选项的,下次加上吧)和最后的x轴标签角度。

大概就介绍这么多吧,想要做的选项还有很多。例如:Y轴的tick,Y轴是否使用log_scale以及上面提到的......TBtools的界面方面,毕竟有shiny了,就这么简化着吧......

最后

当初学习R的动力就是想画个柱状图,学会后才发现如果学R只是为了画图那就买椟还珠了。R语言提供了从数据载入、清洗到统计分析再到作图的全套流程。特别是dplyr提供的整套类似thinking flow的数据处理流程和purrr简化的匿名函数,分析数据的整个流程如水流般水到渠成。如果这个小程序能够激发起你学习R的兴趣,如果你好奇R到底是怎么把数据变成图表的,索性就拆开这个包,看看里面的函数都是做什么的,最后尝试自己用R处理数据吧。希望拆开这个小插件后能在里面发现自己的好奇心。还能孩子多久......

PS:今天用别的电脑打开才发现,插件里的中文注释都是乱码......我有一句mmp不知当讲不当讲

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容