ggplot2-数据变形和映射(2)

ggplot2,我总结了下,主要就是数据变形、映射、几何对象、统计变换以及后期图片调整及美化

1、数据导入和变形

(1)数据导入及格式
#设置工作目录
setwd("/media/han/b/rosalind/ggplot2")
#导入数据框(Rstudio中的Rscript栏输入)
gene_exp <- read.table(file = "gene_exp.txt",
                       sep = "\t",
                       header = T,
                       stringsAsFactors = F)
gene_len <- read.table(file = "gene_len.txt",
                       sep = "\t",
                       header = T,
                       stringsAsFactors = F)
group <- read.table(file = "group.txt",
                    sep = "\t",
                    header = T,
                    stringsAsFactors = F)
#数据格式
> head(gene_exp)
  Gene        S1        S2        S3        S4
1   G1  844.9510 1301.7828 1207.7967 1153.3719
2   G2 1246.8492  785.4974 1182.4283 1193.2796
3   G3 1496.4822 1206.2611 1060.4760 1480.8871
4   G4 1392.3307 1100.6337  687.7282  781.1865
5   G5 1170.3425  857.2048  916.0348 1092.2339
6   G6  721.2031 1477.6733 1543.1986  824.7960
         S5        S6        S7        S8
1  899.1235 1150.6556  957.9256 1728.3804
2 1922.2217  731.0976  631.0565 1318.9178
3 1276.8723 1174.2532 1037.7988  842.4523
4 1586.0368 1176.4862 1082.6887  896.8659
5  353.4801  808.1170 1246.9023 1066.0504
6  655.0933  442.7497 1089.1102  859.6822
         S9
1  356.0858
2 1399.4487
3 1419.1017
4 1295.0609
5  671.8151
6 1223.9446
> head(gene_len)
  Gene Length
1   G1   1712
2   G2   1884
3   G3   2514
4   G4   1559
5   G5   1952
6   G6   2295
> head(group)
  Sample  Group
1     S1 group1
2     S2 group1
3     S3 group1
4     S4 group2
5     S5 group2
6     S6 group2
(2)数据变形
library(tidyr)
library(dplyr)
#gather函数用于数据变形
dexp <- gather(gene_exp, key = Sample, value = Expression, -Gene)
#查看数据变形后的格式
##tidyr数据格式所有列是变量,每行是观测值,可以直接调用列变量
>head(dexp)
  Gene Sample Expression
1   G1     S1   844.9510
2   G2     S1  1246.8492
3   G3     S1  1496.4822
4   G4     S1  1392.3307
5   G5     S1  1170.3425
6   G6     S1   721.2031
(3)合并表格
#重定向%>%符号默认将dexp传递给left_join(a, b, by = "Gene")中的a位置
#a, b 位置互换才能引起合并表格的较大变化,比如left_join(b, a, by = "Gene"),则b表格是在前面的
#left_join或者right_join仅仅是改变了a, b中“Gene”的排列方式,整体还是 a表样式在前,b表在后
dexp <- gather(data = gene_exp,
               key = Sample,
               value = Expression,
               -Gene) %>%
     left_join(gene_len, by = "Gene") %>%
     left_join(group, by = "Sample") %>%
#select()函数选择变量的顺序和个数
     select(Gene, Sample, Group, Expression, Length) %>%
     arrange(Gene)
> head(dexp)
  Gene Sample  Group Expression Length
1   G1     S1 group1   844.9510   1712
2   G1     S2 group1  1301.7828   1712
3   G1     S3 group1  1207.7967   1712
4   G1     S4 group2  1153.3719   1712
5   G1     S5 group2   899.1235   1712
6   G1     S6 group2  1150.6556   1712
(4)映射
#导入包
library(ggplot2)
library(dplyr) 
#数据简化
dexp_small <- filter(dexp, Group =="group1", Gene %in% paste("G", 1:10, sep = "")) %>%
  select(-Group, -Length)
>head(dexp_small)
  Gene Sample Expression
1   G1     S1    844.951
2   G1     S2   1301.783
3   G1     S3   1207.797
4  G10     S1   1407.990
5  G10     S2    473.370
6  G10     S3   1134.640
#ggplot:映射,几何对象,图层
#第一步ggplot()确定了主图层
#X轴是Sample名称,y轴是Expression,aes是映射函数,几何对象是散点图。
ggplot(data = dexp_small, aes(x=Sample, y = Expression, color = Gene)) +
  geom_point()

##映射类型

#颜色类:color(颜色或边框颜色)、fill(填充颜色)和alpha(透明度)
#形状类:linetype(线型)、size(点的大小或线的宽度)和shape(形状)
#位置类:x, y, xmin, xmax, ymin, ymax, xend, yend
#特殊类:一类是group和order,另一类是字符串映射
##主图层
p <- ggplot(data = dexp, aes(x = Sample,
                        y = Expression)) +
##个体几何对象
    geom_point(aes(color=Gene,
                 size=Length,
                 shape=Group),
                 #透明度
                 alpha=8/10)

##分组

#群组几何对象:
##按照样品名进行绘图
p + geom_boxplot(aes(group = Sample))
##按照组名进行分组
p + geom_boxplot(aes(group = Group))
#基因表达趋势变化,并且在group1中添加拟合曲线
p + geom_line(aes(group = Gene, color=Gene)) +
  geom_smooth(aes(group=1))

##分面   
 #将一个图形分配成多个小图形
#facet_wrap()只能按照一个变量进行分面       
#facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed",
#           shrink = TRUE, labeller = "label_value", as.table = TRUE,
#           switch = NULL, drop = TRUE, dir = "h", strip.position = "top")
#重要参数:
#facets:  分面参数如 ~Group,表示用 Group 变量进行数据分类
#nrow:    绘制图形的行数
#ncol:    绘制图形的列数,一般nrow/ncol只设定一个即可
#scales: fixed,小图均使用统一坐标;
#         free每个小图按照各自数据范围自由调整坐标;
#         free_x为自由调整x轴刻度范围;
#         free_y为自由调整y轴刻度范围。
p <- ggplot(data = dexp, aes(x = Sample, y = Expression)) 
p + geom_point(aes(color=Gene, size=Length)) +
  #~Group表示按照组进行分组, scales="free_x"表示坐标轴自由调整,nrow表示只分成一行
  facet_wrap(~Group, scales = "free_x", nrow = 1)

#facet_grid():可以按照两个变量进行分面
#facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed",
#           shrink = TRUE, labeller = "label_value", as.table = TRUE,
#           switch = NULL, drop = TRUE)
#与facet_wrap不同的重要参数:
#facets:  应用两个标准分面,如Gene ~ Group
#margins: Ture,包含所有数据的组 
#space:   每张小图的坐标宽度,值同scales(具有free, fixed等参数),类似于WORD按照内容进行调整
#选择前9条进行展示
dexp_small <- filter(dexp, Gene %in% paste("G", 1:9, sep = ""))
#主图层
ps <- ggplot(data = dexp_small, aes(x=Sample, y = Expression))
#几何图形以及按照基因和数组进行分面
ps + geom_point(aes(color=Length)) + 
  facet_grid(Gene~Group, scales = "free", margins = TRUE, space = "free")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 最近考种数据回来了,今年测得单株,本想用箱线图表示,后来一并把小提琴图也做了,顺便做个笔记吧。 利用SUMIF对相...
    ShawnMagic阅读 12,960评论 2 74
  • 1. install packages install.packages("tidyverse")library(...
    子鹿学生信阅读 2,781评论 1 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • 春风绿芦蒿, 胡马窥我朝。 豪饮冲天笑, 千军我一刀! 阳春三月,风绿芦蒿。韩美狼子竖萨德,窥我朝!男儿当痛...
    任尔风云我自逍阅读 267评论 5 2
  • 昨天在网上看了一个视频,站在桥上的男孩因为表白失败要跳桥,大声叫喊着至死不渝的誓言,逼着被表白的女生在桥下说着 "...
    萧千痕阅读 189评论 0 0