首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >生信入门DAY5-6

生信入门DAY5-6

原创
作者头像
青柠味
修改2025-05-27 18:18:11
修改2025-05-27 18:18:11
2260
举报

DAY5

本篇内容引自生信技能树

六、R语言作图

常见可视化R包和函数
常见可视化R包和函数

1、作图分三类

代码语言:R
复制
#作图分三类

#1.基础包 略显陈旧 了解一下
plot(iris[,1],iris[,3],col = iris[,5]) 
text(6.5,4, labels = 'hello')

dev.off() #关闭画板,多次被占用那就多关闭几次

#2.ggplot2 中坚力量,语法有个性
library(ggplot2)
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

#3.ggpubr 新手友好型 ggplot2简化和美化 褒贬不一
library(ggpubr)
ggscatter(iris,
          x="Sepal.Length",
          y="Petal.Length",
          color="Species")

2、ggplot2

(1)入门级绘图设置

列名不带引号,函数之间写加号。

(2)属性设置

属性设置
属性设置

练习6-1

代码语言:R
复制
# 时间有限,先在现有的代码基础上修改,课后再自己敲
# 6-1
# 1.加载test.Rdata,分别test的以a和b列作为横纵坐标,change列映射颜色,画点图。
# 2.尝试修改点的颜色为暗绿色(darkgreen)、灰色、红色
load("test.Rdata")
ggplot(data = test)+
  geom_point(mapping = aes(x = a,
                           y = b,
                           color = change))+
  scale_color_manual(values = c("darkgreen","grey","red"))
代码语言:R
复制
library(ggplot2)
#1.入门级绘图模板:作图数据,横纵坐标
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length))
#2.属性设置(颜色、大小、透明度、点的形状,线型等)

#2.1 手动设置,需要设置为有意义的值,写在了mapping这个括号里面,是aes的参数,是列名。

ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length), 
             color = "blue")

ggplot(data = iris) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), 
             size = 5,     # 点的大小5mm
             alpha = 0.5,  # 透明度 50%
             shape = 8)  # 点的形状

#2.2 映射:按照数据框的某一列来定义图的某个属性,写在geom_point这个括号里面,是具体颜色。
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

## Q1 能不能自行指定映射的具体颜色?
#如果没有加color = Species,干活但不报错,结果也不是我们想要的。
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+
  scale_color_manual(values = c("blue","grey","red"))

#想要什么颜色就有什么颜色-十六进制颜色编码
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+
  scale_color_manual(values = c("#2874C5","#e6b707","#f87669"))#可以用截图工具Snipaste去取
#paletteer-集成多个配色R包,两千多种选择
if(!require(paletteer))install.packages("paletteer",ask = F,update = F)
if(!require(awtools))install.packages("awtools",ask = F,update = F)
library(paletteer)
ggplot(data = iris)+ 
  geom_point(mapping = aes(x = Sepal.Length, 
                           y = Petal.Length, 
                           color = Species))+ 
  scale_color_paletteer_d("awtools::mpalette") #配色R包::配色名
palettes_d_names

#View(palettes_d_names)
#library(paletteer)
#length(unique(palettes_d_names$package))
#table(duplicated(palettes_d_names$package))
#tmp=installed.packages() 装了哪些函数了


## Q2 区分color和fill两个属性
### Q2-1 空心形状和实心形状都用color设置颜色
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 17) #17号,实心的例子

ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species),
             shape = 2) #2号,空心的例子
### Q2-2 既有边框又有内心的,才需要color和fill两个参数

ggplot(data = iris)+  
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length),
             shape = 24,
             color = "red",          				     
             fill = "yellow") #24号,双色的例子

(3)几何对象

代码语言:R
复制
#局部设置和全局设置
#一个geom函数画出来的所有东西称之为一个几何对象,几何对象可以叠加
ggplot(data = iris) + 
  geom_smooth(mapping = aes(x = Sepal.Length, 
                          y = Petal.Length))+
  geom_point(mapping = aes(x = Sepal.Length, 
                           y = Petal.Length))#局部设置

ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))+
  geom_smooth()+
  geom_point()#全局设置

习题6-2

代码语言:R
复制
# 1.尝试写出下图的代码
# 2.尝试在此图上叠加点图,
# 能发现什么问题?
#把color改成fill就可以实现填充.
#另外图中点的数量没有150个,要让这些点抖动起来,解决办法是geom_point(position='jitter')或者geom_jitter()
ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width, fill = Species))+
  geom_boxplot()+
  geom_point(position='jitter')#全局设置

(4)位置调整

代码语言:R
复制
#geom_point(position = "jitter")
  geom_jitter()

(5)坐标系

代码语言:R
复制
coord_flip()

(6)主题

代码语言:R
复制
 theme_bw()
ggplot2语法
ggplot2语法

3、ggpubr作图

需要系统学习,现搜现学;

画图代码可以给它赋值;

列名该加引号得加,没有图层叠加;

组间比较加p值(ggplot2没有)。

代码语言:R
复制
# ggpubr 搜代码直接用,基本不需要系统学习

# sthda上有大量ggpubr出的图
library(ggpubr)
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",
              color = "Species", shape = "Species",add = "jitter")
p
my_comparisons <- list( c("setosa", "versicolor"), 
                        c("setosa", "virginica"), 
                        c("versicolor", "virginica") )
p + stat_compare_means(comparisons = my_comparisons,
                       aes(label = after_stat(p.signif)))

4、保存和导出

代码语言:R
复制
#图片保存的三种方法

#1.基础包作图的保存,三段论
pdf("iris_box_ggpubr.pdf")#保存的函数及文件名,函数pdf要与文件的后缀一样,还有其它的小伙伴,查帮助文档。
boxplot(iris[,1]~iris[,5])#作图代码
text(6.5,4, labels = 'hello')
dev.off()#关闭画板

#2.ggplot系列图(包括ggpubr)通用的简便保存 ggsave
p <- ggboxplot(iris, x = "Species", 
               y = "Sepal.Length",
               color = "Species", 
               shape = "Species",
               add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
#ggsave("iris_box_ggpubr.png")如果没赋值的话

#3.eoffice包 导出为ppt,全部元素都是可编辑模式
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx")
#在PPT里面改图的一些参数(如字体,字号)会比用代码方便得多。

5、画图扩展部分

(1)STHDA网站

(2)工作目录里有扩展学习的代码

(3)小洁老师语雀画图合集

DAY6

七、R语言的综合运用

综合运用
综合运用

引自生信技能树

1、玩转字符串

引自生信技能树

代码语言:R
复制
rm(list = ls())
if(!require(stringr))install.packages('stringr')
library(stringr)

x <- "The birch canoe slid on the smooth planks."
x
### 1.检测字符串长度
str_length(x)#拆分出来是一个列表
length(x)
### 2.字符串拆分
str_split(x," ")#拆分出来是一个列表
class(str_split(x," "))
x2 = str_split(x," ")[[1]];x2#把列表中唯一的子集提取出来
class(x2)

y = c("jimmy 150","nicker 140","tony 152")
str_split(y," ")
class(str_split(y," "))
y2 = str_split(y," ")[[2]];y2
class(y2)
str_split(y," ",simplify = T)#让结果简单化,让它不要产生一个列表
#这个simplify = T的参数只能简化成矩阵,而不能简化成数据框。

### 3.按位置提取字符串
str_sub(x,5,9)

### 4.字符检测
str_detect(x2,"h")#这串逻辑值的特点是:长度与向量x2一一对应,且长度相等。
#所以可以按照逻辑值给向量取子集。
str_starts(x2,"T")
str_ends(x2,"e")
### 5.字符串替换
x2
str_replace(x2,"o","A")
str_replace_all(x2,"o","A")

### 6.字符删除
x
str_remove(x," ")
str_remove_all(x," ")

2、玩转数据框

代码语言:R
复制
test <- iris[c(1:2,51:52,101:102),]
rownames(test) =NULL # 去掉行名,NULL是“什么都没有”
test

# arrange,数据框按照某一列排序

library(dplyr)
arrange(test, Sepal.Length) #从小到大
arrange(test, desc(Sepal.Length)) #从大到小
arrange(test, "Sepal.Length")#加引号,虽不报错,但结果不对,所以不能带引号。

# distinct,数据框按照某一列去重复
distinct(test,Species,.keep_all = T)#.keep_all = T这个参数一般不用动,想知道自己查。

# mutate,数据框新增一列
mutate(test, new = Sepal.Length * Sepal.Width)
#test$new=test$Sepal.Length * test$Sepal.Width
test
test=mutate(test, new = Sepal.Length * Sepal.Width)
test
#修改过的变量,一定要重新赋值


# 连续的步骤

# 1.多次赋值,产生多个中间的变量
#select用来选列,filter用来选行
x1 = select(iris,-5)#不选第五列
x2 = as.matrix(x1)
x3 = head(x2,50)#head是取这个x2的前50行的意思
pheatmap::pheatmap(x3)

# 2. 嵌套,代码不易读
pheatmap::pheatmap(head(as.matrix(select(iris,-5)),50))
#彩虹括号设置

# 3.管道符号传递,简洁明了(必须要加载一个包才能传递,什么包?dplyr)
#默认传到第一个参数,如果不是传到第一个参数,文档有补充,传到哪就在哪打点。
iris %>%
  select(-5) %>%
  as.matrix() %>%
  head(50) %>% 
  pheatmap::pheatmap()

3、条件和循环

(1)if循环

(2)for循环

代码语言:R
复制
rm(list = ls())

## 一.条件语句

###1.if(){ }

#### (1)只有if没有else,那么条件是FALSE时就什么都不做
#TRUE执行,FALSE不执行
i = -1
if (i<0) print('up')
if (i>0) print('up')

#理解下面代码
if(!require(tidyr)) install.packages('tidyr')
#如果加载成功(TRUE),!否定-FALSE,所以不安装tidyr。
#如果加载失败(FALSE),!否定-TRUE,所以安装tidyr。


#### (2)有else
i =1
if (i>0){
  print('+')
} else {
  print("-")
}
i = 1
ifelse(i>0,"+","-")#这个函数非常重要
#第一个参数代表逻辑值,第二个参数代表逻辑值为TRUE的结果,第三个参数代表逻辑值为FALSE的结果。

x = rnorm(3)
x
ifelse(x>0,"+","-")

#ifelse()+str_detect(),王炸(差异化分析分组时可用)
samples = c("tumor1","tumor2","tumor3","normal1","normal2","normal3")
k1 = str_detect(samples,"tumor");k1
ifelse(k1,"tumor","normal")
k2 = str_detect(samples,"normal");k2
ifelse(k2,"normal","tumor")

#### (3)多个条件
i = 0
if (i>0){
  print('+')
} else if (i< 0) {
  print('-')
} else{
  print('0')
}

ifelse(i>0,"+",ifelse(i<0,"-","0"))

## 二、for循环
#把x里面的每个值批量地带入中括号里面的代码就可以了。
for( i in 1:4){
  print(i)
}

#批量画图
par(mfrow = c(2,2))
for(i in 1:4){
  plot(iris[,i],col = iris[,5])
}
#批量装包
pks = c("tidyr","dplyr","stringr")
for(g in pks){
  if(!require(g,character.only = T))#循环中这个参数永远加进去character.only = T
    install.packages(g,ask = F,update = F)#参数的意思是,不要问我更不更新。
}

练习题7-2

代码语言:R
复制
#练习7-2----
# 1.加载deg.Rdata,根据a、b两列的值,按照以下条件生成向量x:
 load("deg.Rdata")
#a< -1 且b<0.05,则x对应的值为down;
#a>1 且b<0.05,则x对应的值为up;
#其他情况,x对应的值为no
# 统计up、down、no各出现了多少次
# 提示:ifelse函数
deg$b
x=ifelse(deg$a< -1 & deg$b<0.05,"down",ifelse(deg$a>1&deg$b<0.05,"up","no"))
table(x) 

4、隐式循环

代码语言:R
复制
rm(list = ls())
## apply()族函数

### 1.apply 处理矩阵或数据框

#apply(X, MARGIN, FUN, …) 
#其中X是数据框/矩阵名;
#MARGIN为1表示行,为2表示列,FUN是函数

test<- iris[1:6,1:4]

apply(test, 2, mean)
apply(test, 1, sum)

### 2.lapply(list, FUN, …) 
# 对列表/向量中的每个元素实施相同的操作

lapply(1:4,rnorm)

5、两个数据框之间的连接

代码语言:R
复制
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2
library(dplyr)
inner_join(test1,test2,by="name")#取交集,取中间的圈
left_join(test1,test2,by="name")#取左边和中间的小圈
right_join(test1,test2,by="name")#取右边和中间的小圈
full_join(test1,test2,by="name")#左中右全部都取

练习题7-3

代码语言:R
复制
#练习7-3----
#1. 加载test1.Rdata,将两个数据框按照probe_id列连接在一起,按共同列取交集
#2. 找出logFC最小的10个基因和logFC最大的10个基因(symbol列就是基因名)
rm(list = ls())
library(dplyr)
y=inner_join(dat,ids,by="probe_id")
y
x=arrange(y,logFC)
x
tail(x$symbol,10)
head(x$symbol,10)
#x=arrange(y,desc(logFC))
#x
#tail(x$symbol,10)

6、一些顶呱呱的函数

(1)match() #匹配

(2)order() #用的少,用arrange

(3)dir() #和文件打交道

(4)file.creat() #和文件打交道

(5)file.exists() #和文件打交道

(6)file.remove() #和文件打交道

抓重点
抓重点

7、GEO网页介绍

(1)筛选

基因芯片/常规转录组和单细胞转录组

(2)检查

样本数量,建议不少于6个

(3)具体的某个GSE介绍

①上传时间:基因芯片一般没有时间限制;单细胞的建议是20年以后。

②基因数量:基因芯片一般是一万五六,多的五六万。

③GPL:看使用该平台的系列(GSE)和样本(GSM)数量,卖的好与不好;

④Ensembl:Ensembl数据库的基因ID,ENSGxxx;Entrez Gene:NCBI数据库给的gene ID,是数字,如520;symbol :基因名称。

⑤GSM芯片数据基因表达量的数据范围:0~20 取过log2的数据;0~几万 没取log2;有<0 的,不正常数据,只能处理原始数据重新获得表达矩阵

⑥GEO文件下载:只有芯片数据的文件大小是兆(M),像其它几点几K的,里面就没有表达矩阵。不管多大,这个文件一定有临床信息;

⑦某个GSE编号主页,点costom展开,以CEL结尾的代表原始数据。

从GEO网页获取哪些信息
从GEO网页获取哪些信息
GEO网页
GEO网页

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DAY5
    • 六、R语言作图
    • 1、作图分三类
    • 2、ggplot2
      • (1)入门级绘图设置
      • (2)属性设置
      • 练习6-1
      • (3)几何对象
      • 习题6-2
      • (4)位置调整
      • (5)坐标系
      • (6)主题
      • 3、ggpubr作图
      • 4、保存和导出
      • 5、画图扩展部分
      • (1)STHDA网站
      • (2)工作目录里有扩展学习的代码
      • (3)小洁老师语雀画图合集
  • DAY6
    • 七、R语言的综合运用
      • 1、玩转字符串
      • 2、玩转数据框
      • 3、条件和循环
      • (1)if循环
      • (2)for循环
      • 练习题7-2
      • 4、隐式循环
      • 5、两个数据框之间的连接
      • 练习题7-3
      • 6、一些顶呱呱的函数
      • (1)match() #匹配
      • (2)order() #用的少,用arrange
      • (3)dir() #和文件打交道
      • (4)file.creat() #和文件打交道
      • (5)file.exists() #和文件打交道
      • (6)file.remove() #和文件打交道
      • 7、GEO网页介绍
      • (1)筛选
      • (2)检查
      • (3)具体的某个GSE介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档