作者简介

taoyan:R语言中文社区特约作家,伪码农,R语言爱好者,爱开源。

个人博客: https://ytlogos.github.io/

往期回顾

R语言可视化学习笔记之相关矩阵可视化包ggcorrplot

R语言学习笔记之相关性矩阵分析及其可视化

ggplot2学习笔记系列之利用ggplot2绘制误差棒及显著性标记

ggplot2学习笔记系列之主题(theme)设置

用circlize包绘制circos-plot

利用gganimate可视化R-Ladies发展情况

一篇关于国旗与奥运会奖牌的可视化笔记

利用ggseqlogo绘制seqlogo图

R语言data manipulation学习笔记之创建变量、重命名、数据融合

R语言data manipulation学习笔记之subset data

R语言可视化学习笔记之gganimate包

创建属于自己的调色板

Lesson 01 for Plotting in R for Biologists

Lesson 02&03 for Plotting in R for Biologists

Lesson 04 for Plotting in R for Biologists

这节课作者命名为”Tweaking everything in a plot”。主要是对图形细节进行优化,包括:

  • 题目(title)、坐标轴标签、图例标签等

  • 字体

  • 颜色

  • 背景

  • 网格线等


数据加载及清洗

这部分在上节课已经讲过了,这里就不再详述了。

library(tidyverse)

library(plyr)

my_data <- read.csv("Encode_HMM_data.txt", sep = "\t", header = FALSE)

names(my_data)[1:4] <- c("chrom","start","stop","type")

my_data$chrom <- factor(gsub("chr","", my_data$chrom, fixed = TRUE), levels = c(seq(1:22),"X","Y"))

my_data <- my_data[my_data$type %in% c("1_Active_Promoter","4_Strong_Enhancer","8_Insulator"), ]

my_data$type <- revalue(my_data$type, c("1_Active_Promoter"="Promoter", "4_Strong_Enhancer"="Enhancer","8_Insulator"="Insulator"))

可视化

接下来就针对图形进行优化调整

ggplot(my_data, aes(x=chrom, fill=type))+geom_bar()

添加标题

ggplot(my_data, aes(x=chrom, fill=type))+geom_bar()+labs(title="Regulatory features by chromosomes")

需要注意的一点是,添加的title默认是位于左上角,如果要居中显示的话最简单的办法就是在标题前添加空格。

修改坐标轴以及图例标签

ggplot(my_data, aes(x=chrom, fill=type))+

geom_bar()+

labs(x="Chromosome", y="Count", fill="Feature")#这里fill是对应ampping里面的fill映射,显示于图例

主题修改

basic <- ggplot(my_data, aes(x=chrom, fill=type))+

geom_bar()+

labs(x="Chromosome", y="Count", fill="Feature")

#设置文本大小

(basic+theme_gray(base_size = 20))

如果想要使得主题适用于所有的图形,可以通过theme_set()进行设置。

theme_set(theme_gray(base_size = 20))

basic

恢复默认设置主题

theme_set(theme_gray())

basic

颜色

R有个包RColorNBrewer提供调色板

library(RColorBrewer)

display.brewer.all()

下面测试一下这些调色板

basic+scale_fill_brewer(palette = "Set1")

basic+scale_fill_brewer(palette = "Pastel1")

basic+scale_fill_brewer(palette = "YlorRd")

不使用调色板的话也可以自己设置颜色,结合取色器的话很是很赞的

basic+scale_fill_manual(values = c("green", "blue", "red"))

head(colors())

## [1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1"

## [5] "antiquewhite2" "antiquewhite3"

有的时候我们需要很多种颜色,多到一个调色板都满足不了时怎么办?

chrom_plot <- ggplot(my_data, aes(x=type, fill=chrom))+geom_bar()

chrom_plot

chrom_plot+scale_fill_brewer(type = "qual", palette = 1)

ggplot默认调用的是rainbpw调色板,颜色容易让人误解,不好分辨,但是其他的调色板颜色数量是不足的。这时可以通过将好几个palette合并在一起组成一个新的palette。

palette1 <- brewer.pal(9, "Set1")

palette1

## [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628"

## [8] "#F781BF" "#999999"

palette2 <- brewer.pal(8, "Set2")

palette2

## [1] "#66C2A5" "#FC8D62" "#8DA0CB" "#E78AC3" "#A6D854" "#FFD92F" "#E5C494"

## [8] "#B3B3B3"

palette3 <- brewer.pal(9, "Set3")

palette3

## [1] "#8DD3C7" "#FFFFB3" "#BEBADA" "#FB8072" "#80B1D3" "#FDB462" "#B3DE69"

## [8] "#FCCDE5" "#D9D9D9"

通过饼图来查看一下这几个调色板

pie(rep(1, length(palette1)), col = palette1)

pie(rep(1, length(palette2)), col = palette2)

pie(rep(1, length(palette3)), col = palette3)

将这几个色斑合并成一个大的调色板

big_palette <- c(palette1, palette2, palette3)

pie(rep(1, length(big_palette)), col = big_palette)

chrom_plot+scale_fill_manual(values = big_palette)

也可以打乱颜色顺序

chrom_plot+scale_fill_manual(values = sample(big_palette))


字体

后续大部分调整都是通过theme来实现的。

#对所有字体进行调整

basic+theme_gray(base_size = 24, base_family = "Times New Roman")

但是很多时候我们都是对特定字体、标签、颜色等进行特定的调整,这时就可以通过theme逐一调整。

basic+theme(axis.text = element_text(size=20))

basic+theme(axis.title = element_text(size = 20))

basic+theme(legend.title = element_text(size = 20))

basic+theme(legend.text = element_text(size=20, family = "Times New Roman"))

basic+theme(legend.text = element_text(size=20, family = "Times New Roman"),

axis.title = element_text(size=30),

axis.text = element_text(size=20))

背景

basic+theme(panel.background = element_rect(fill="pink"))

basic+theme(panel.background = element_rect(fill="white"))


网格线

basic+theme(panel.grid.major = element_line(colour = "blue"), panel.grid.minor = element_line(colour = "red"))

移除所有的网格线

basic+theme(panel.grid.major = element_line(NA),

panel.grid.minor = element_line(NA))

只保留y轴线

basic+theme(panel.grid.major.y = element_line(colour = "black", size = 0.20),

panel.grid.major.x = element_line(NA),

panel.grid.minor = element_line(NA))

修改刻度

basic+theme(axis.ticks = element_line(size=0.2))

basic+theme(axis.ticks = element_line(NA))

basic+theme(axis.ticks = element_line(colour = "blue", size = 2))

basic+theme(axis.ticks = element_line(size=2),

axis.ticks.x = element_line(colour = "blue"),

axis.ticks.y = element_line(colour = "red"))

图例

修改图例位置

basic+theme(legend.position = "top")

basic+theme(legend.position = "bottom")

basic+theme(legend.position = c(0,0))#左下角

basic+theme(legend.position = c(1,1))#右上角

basic+theme(legend.position = c(0.8,0.8))#通过坐标设置可以将图例置于任意位置

移除图例

basic+labs(fill="")

basic+labs(fill="")+theme(legend.position = c(0.8,0.8))

看看文章发表样式图形

publication_style <- basic+guides(fill=FALSE)+

theme(axis.line = element_line(size = 0.5),

panel.background = element_rect(fill=NA, size = rel(20)),

panel.grid.minor = element_line(colour = NA),

axis.text = element_text(size=16),

axis.title = element_text(size = 18))

publication_style

将柱形图与x轴之间的距离消除

publication_style+scale_y_continuous(expand = c(0,0))

可以看到上述图形基本达到了文章发表的水平,因此我们可以将主题theme保存下来以后使用,通过设置全局主题来使所有图形有相同版式。

theme_set(theme_gray()+

theme(axis.line = element_line(size = 0.5),

panel.background = element_rect(fill=NA, size = rel(20)),

panel.grid.minor = element_line(colour = NA),

axis.text = element_text(size = 16),

axis.title = element_text(size = 18)))

basic

basic+scale_y_continuous(expand = c(0,0))+guides(fill=FALSE)

如果需要还原主题设定的话,只要运行以下命令就行:

theme_set(theme_gray())

SessionInfO()

sessionInfo()

## R version 3.4.3 (2017-11-30)

## Platform: x86_64-w64-mingw32/x64 (64-bit)

## Running under: Windows 10 x64 (build 16299)

##

## Matrix products: default

##

## locale:

## [1] LC_COLLATE=Chinese (Simplified)_China.936

## [2] LC_CTYPE=Chinese (Simplified)_China.936

## [3] LC_MONETARY=Chinese (Simplified)_China.936

## [4] LC_NUMERIC=C

## [5] LC_TIME=Chinese (Simplified)_China.936

##

## attached base packages:

## [1] stats     graphics  grDevices utils     datasets  methods   base

##

## other attached packages:

##  [1] RColorBrewer_1.1-2 plyr_1.8.4         forcats_0.2.0

##  [4] stringr_1.2.0      dplyr_0.7.4        purrr_0.2.4

##  [7] readr_1.1.1        tidyr_0.7.2        tibble_1.4.2

## [10] ggplot2_2.2.1.9000 tidyverse_1.2.1

##

## loaded via a namespace (and not attached):

##  [1] Rcpp_0.12.15      cellranger_1.1.0  pillar_1.1.0

##  [4] compiler_3.4.3    bindr_0.1         tools_3.4.3

##  [7] digest_0.6.14     lubridate_1.7.1   jsonlite_1.5

## [10] evaluate_0.10.1   nlme_3.1-131      gtable_0.2.0

## [13] lattice_0.20-35   pkgconfig_2.0.1   rlang_0.1.6

## [16] psych_1.7.8       cli_1.0.0         rstudioapi_0.7

## [19] yaml_2.1.16       parallel_3.4.3    haven_1.1.1

## [22] bindrcpp_0.2      xml2_1.2.0        httr_1.3.1

## [25] knitr_1.18        hms_0.4.1         rprojroot_1.3-2

## [28] grid_3.4.3        glue_1.2.0        R6_2.2.2

## [31] readxl_1.0.0      foreign_0.8-69    rmarkdown_1.8

## [34] modelr_0.1.1      reshape2_1.4.3    magrittr_1.5

## [37] backports_1.1.2   scales_0.5.0.9000 htmltools_0.3.6

## [40] rvest_0.3.2       assertthat_0.2.0  mnormt_1.5-5

## [43] colorspace_1.3-2  labeling_0.3      stringi_1.1.6

## [46] lazyeval_0.2.1    munsell_0.4.3     broom_0.4.3

## [49] crayon_1.3.4

 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

Lesson 05 for Plotting in R for Biologists相关推荐

  1. (数据科学学习手札05)Python与R数据读入存出方式的总结与比较

    在数据分析的过程中,外部数据的导入和数据的导出是非常关键的部分,而Python和R在这方面大同小异,且针对不同的包或模块,对应着不同的函数来完成这部分功能: Python 1.TXT文件 导入: 以某 ...

  2. PSP dev lesson 05

    在学会架设开发环境,编写第一个程序,领略一些编程技巧,并且涉猎列一些经典程序之后,接下来我们开始第五课,你不要想这里有什么会让你感到惊讶的,这只是通过学习一些高级的概念来增强我们的编程技巧. 高级,这 ...

  3. [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践

    这一篇,本文会介绍一下基本的断言概念,但重点会放在企业级单元测试的相关功能上面.下面来跟大家分享一下xUnit.Net的断言,主要涉及到以下内容: 关于断言的概念 xUnit.Net常用的断言 关于单 ...

  4. 数据分析-R语言资料整理

    独家分享--48页PPT解密数据可视化! Excel图表快捷操作小技巧 基于随机森林的分类与回归 R语言制作网页 ggplot2:可视化设计师的神器,了解一下 [译]R包介绍:Online Rando ...

  5. 精心整理 | R语言中文社区历史文章整理(类型篇)

    2018年过去一半了~又到了盘点的时间~感谢长时间来各位好友的关注,我们的成长与你们的爱护是分不开的.更感谢各位老师的投稿,支撑起了我们的这个社区,让更多R语言的爱好者和从业者获得最棒的知识!本文选取 ...

  6. [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象

    从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题: Selenium基本的概念以及在企业化测试框架中的位置 Selenium核心对象(浏览器驱动) Web Drive ...

  7. 为什么要是用R语言?

    关于R语言的优劣势详细了解: 大数据之R语言速成与实战 为什么选择R? 丰富的资源:涵盖了多种行业数据分析中几乎所有的方法. 良好的扩展性:十分方便得编写函数和程序包,跨平台,可以胜任复杂的数据分析. ...

  8. [NEHE Couse] 05.3D Objects

    在这节课中终于从二维平面拓展到三维平面上来了,程序中绘制了两个3D物体,一个是四面体棱锥,一个是一个正方体,为了看起来效果好些,四棱锥每个顶点的颜色都不一样,然后颜色样式采用GL_SMOOTH来控制, ...

  9. r语言中残差与回归值的残差图_R语言基础-数据分析及常见数据分析方法

    R表达式中常用的符号 残差(Residuals) 残差是真实值与预测值之间的差,五个分位的值越小模型越精确 系数项与截距项(Coefficients & Intercept)和P值指标 残差标 ...

  10. r 函数返回多个值_R语言:广义估计方程(GEE)

    01 解决何种问题 在临床研究中,经常会比较两种治疗方式对患者结局的影响,并且多次测量结局.例如为了研究两种降血糖药对血糖的控制结果是否存在差异,研究者会在两组人群服药后不同的时间点记录血糖值,然后评 ...

最新文章

  1. Java - Poi 操作 Excel
  2. dataloader 源码_带你从零掌握迭代器及构建最简DataLoader
  3. 【Paper】Network Dissection: Quantifying Interpretability of Deep Visual Representations跑源码遇到的问题
  4. C++接口工程实践:有哪些实现方法?
  5. Oracle查询数据库中所有表的记录数
  6. 【Python学习】 - pyecharts包 - 地图可视化
  7. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解
  8. 2021-2025年中国窗帘行业市场供需与战略研究报告
  9. Mac怎么连接多个蓝牙音箱?
  10. 【深度学习-花书】第二章 线性代数
  11. 【软件工程】-项目开发计划
  12. 蓝桥杯试题 基础练习 圆的面积
  13. Git报错--Everything up-to-date branch ‘main‘ set up to track ‘origin/main‘.
  14. 正则表达式限制输入框输入
  15. Hdu1329Hanoi Tower Troubles Again!
  16. 基于Python实现的作家风格识别
  17. 沙箱支付宝------简单实现支付
  18. 二见钟情之ComboBox显示查询结果集
  19. ubuntu 16.04-设置合上笔记本盖子不休眠
  20. Python使用ffmpeg下载m3u8高清视频

热门文章

  1. 闲鱼面试官:Thread.sleep(0) 到底有什么用?我:有点懵~
  2. 大佬带路,用Java实现天天酷跑(附源码),网友:这也太TM屌了~
  3. 架构师被疯抢,华为出了什么招?
  4. 从今天起,我不再使用 Java Date了!
  5. 成为一名优秀架构师有标准吗?这12点或许能带给你一些启发
  6. 微服务架构下的数据一致性:概念及相关模式
  7. 从0开始学习 GitHub 系列之「Git 速成」
  8. python模拟浏览器访问百度_selenium与python自动化测试模拟登录百度
  9. 理解unittest(六)
  10. dedecms 中变量函数