常用生信SCI图绘制代码(R语言)
本篇文章将生物学中常用的图形代码,整理到一块。
示例数据都是基于网络的, 代码可以直接复制运行 。注释齐全。
另外如果不想写代码,在每个图形后面还附有一个 在线绘图 的网址。
内容持续更新中!
1. 热图
library(pheatmap) # 加载pheatmap这个R包
# 1,读取热图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/demoData/heatmap/data.heatmap.txt", #文件名称 注意文件路径,格式
header = T, # 是否有标题
sep = "\t", # 分隔符是Tab键
row.names = 1, # 指定第一列是行名
fill=T) # 是否自动填充,一般选择是
# (可选)读取分组数据文件
# dfSample = read.delim("https://www.bioladder.cn/shiny/zyp/demoData/heatmap/sample.class.txt",header = T,row.names = 1,fill = T,sep = "\t")
# dfGene = read.delim("https://www.bioladder.cn/shiny/zyp/demoData/heatmap/gene.class.txt",header = T,row.names = 1,fill = T,sep = "\t")
# 2,绘图
pheatmap(df,
# annotation_row=dfGene, # (可选)指定行分组文件
# annotation_col=dfSample, # (可选)指定列分组文件
show_colnames = TRUE, # 是否显示列名
show_rownames=TRUE, # 是否显示行名
fontsize=2, # 字体大小
color = colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(50), # 指定热图的颜色
annotation_legend=TRUE, # 是否显示图例
border_color=NA, # 边框颜色 NA表示没有
scale="row", # 指定归一化的方式。"row"按行归一化,"column"按列归一化,"none"不处理
cluster_rows = TRUE, # 是否对行聚类
cluster_cols = TRUE # 是否对列聚类
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
2. PCA
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(ggbiplot)
# ggbiplot包需要从github上下载
# install.packages("devtools")
# library(devtools)
# install_github("vqv/ggbiplot")
# 读取PCA数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/data.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T, # 指定第一行是列名
row.names = 1 # 指定第一列是行名
df=t(df) # 对数据进行转置,如果想对基因分组则不用转置
# 读取样本分组数据文件
dfGroup = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/sample.class.txt",
header = T,
row.names = 1
# PCA计算
pca_result <- prcomp(df,
scale=T # 一个逻辑值,指示在进行分析之前是否应该将变量缩放到具有单位方差
ggbiplot(pca_result,
var.axes=F, # 是否为变量画箭头
obs.scale = 1, # 横纵比例
groups = dfGroup[,1], # 添加分组信息,为分组文件的第一列
ellipse = T, # 是否围绕分组画椭圆
circle = F)+
geom_text( # geom_text一个在图中添加标注的函数
aes(label=rownames(df)), # 指定标注的内容为数据框df的行名
vjust=1.5, # 指定标记的位置,vjust=1.5 垂直向下1.5个距离。 负数为位置向上标记,正数为位置向下标记
size=2 # 标记大小
theme_bw()
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
3. 火山图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(ggrepel) #用于标记的包
# 读取火山图数据文件
data = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Volcano/Volcano.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
# 建议您的文件里对应的名称跟demo数据一致,这样不用更改后续代码中的变量名称
FC = 1.5 # 用来判断上下调,一般蛋白质组的项目卡1.5
PValue = 0.05 #用来判断上下调
# 判断每个基因的上下调,往数据框data里新增了sig列
data$sig[(-1*log10(data$PValue) < -1*log10(PValue)|data$PValue=="NA")|(log2(data$FC) < log2(FC))& log2(data$FC) > -log2(FC)] <- "NotSig"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) >= log2(FC)] <- "Up"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) <= -log2(FC)] <- "Down"
# 标记方式(一)
# 根据数据框中的Marker列,1的为标记,0的为不标记
data$label=ifelse(data$Marker == 1, as.character(data$Name), '')
# (或)标记方式(二)
# 根据PValue小于多少和log[2]FC的绝对值大于多少筛选出合适的点
# PvalueLimit = 0.0001
# FCLimit = 5
# data$label=ifelse(data$PValue < PvalueLimit & abs(log2(data$FC)) >= FCLimit, as.character(data$Name), '')
ggplot(data,aes(log2(data$FC),-1*log10(data$PValue))) + # 加载数据,定义横纵坐标
geom_point(aes(color = sig)) + # 绘制散点图,分组依据是数据框的sig列
labs(title="volcanoplot", # 定义标题,x轴,y轴名称
x="log[2](FC)",
y="-log[10](PValue)") +
# scale_color_manual(values = c("red","green","blue")) + # 自定义颜色,将values更改成你想要的三个颜色
geom_hline(yintercept=-log10(PValue),linetype=2)+ # 在图上添加虚线
geom_vline(xintercept=c(-log2(FC),log2(FC)),linetype=2)+ # 在图上添加虚线
geom_text_repel(aes(x = log2(data$FC), # geom_text_repel 标记函数
y = -1*log10(data$PValue),
label=label),
max.overlaps = 10000, # 最大覆盖率,当点很多时,有些标记会被覆盖,调大该值则不被覆盖,反之。
size=3, # 字体大小
box.padding=unit(0.5,'lines'), # 标记的边距
point.padding=unit(0.1, 'lines'),
segment.color='black', # 标记线条的颜色
show.legend=FALSE)+
theme_bw()
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
4. 韦恩图
# 加载R包,没有安装请先安装 install.packages("包名")
library(venn) #韦恩图(venn 包,适用样本数 2-7)
library(VennDiagram)
# 读取数据文件
venn_dat <- read.delim('https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Venn/flower.txt') # 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
venn_list <- list(venn_dat[,1], venn_dat[,2], venn_dat[,3], venn_dat[,4], venn_dat[,5], venn_dat[,6], venn_dat[,7]) # 制作韦恩图搜所需要的列表文件
names(venn_list) <- colnames(venn_dat[1:7]) # 把列名赋值给列表的key值
venn(venn_list,
zcolor='style', # 调整颜色,style是默认颜色,bw是无颜色,当然也可以自定义颜色
opacity = 0.3, # 调整颜色透明度
box = F, # 是否添加边框
ilcs = 0.5, # 数字大小
sncs = 1 # 组名字体大小
# 更多参数 ?venn查看
# 查看交集详情,并导出结果
inter <- get.venn.partitions(venn_list)
for (i in 1:nrow(inter)) inter[i,'values'] <- paste(inter[[i,'..values..']], collapse = '|')
inter <- subset(inter, select = -..values.. )
inter <- subset(inter, select = -..set.. )
write.table(inter, "result.csv", row.names = FALSE, sep = ',', quote = FALSE)
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
5. Upest图
# 加载R包,没有安装请先安装 install.packages("包名")
library(UpSetR) #Upset图(upset 包,适用样本数 2-7)
library(VennDiagram)
# 读取数据文件
upset_dat <- read.delim('https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Venn/flower.txt') # 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
upset_list <- list(upset_dat[,1], upset_dat[,2], upset_dat[,3], upset_dat[,4], upset_dat[,5], upset_dat[,6], upset_dat[,7]) # 制作Upset图搜所需要的列表文件
names(upset_list) <- colnames(upset_dat[1:7]) # 把列名赋值给列表的key值
upset(fromList(upset_list), # fromList一个函数,用于将列表转换为与UpSetR兼容的数据形式。
nsets = 100, # 绘制的最大集合个数
nintersects = 40, #绘制的最大交集个数,NA则全部绘制
order.by = "freq", # 矩阵中的交点是如何排列的。 "freq"根据交集个数排序,"degree"根据
keep.order = F, # 保持设置与使用sets参数输入的顺序一致。默认值是FALSE,它根据集合的大小排序。
mb.ratio = c(0.6,0.4), # 左侧和上方条形图的比例关系
text.scale = 2 # 文字标签的大小
# 更多参数 ?upset查看
# 查看交集详情,并导出结果
inter <- get.venn.partitions(upset_list)
for (i in 1:nrow(inter)) inter[i,'values'] <- paste(inter[[i,'..values..']], collapse = '|')
inter <- subset(inter, select = -..values.. )
inter <- subset(inter, select = -..set.. )
write.table(inter, "result.csv", row.names = FALSE, sep = ',', quote = FALSE)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
6. 3维PCA
# 加载R包,没有安装请先安装 install.packages("包名")
library(scatterplot3d)
# 读取PCA数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/data.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T, # 指定第一行是列名
row.names = 1 # 指定第一列是行名
df=t(df) # 对数据进行转置,如果想对基因分组则不用转置
# 读取样本分组数据文件
dfGroup = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/sample.class.txt",
header = T,
row.names = 1
# PCA计算
pca_result <- prcomp(df,
scale=T # 一个逻辑值,指示在进行分析之前是否应该将变量缩放到具有单位方差
pca_result$x<-data.frame(pca_result$x)
# 设置颜色,有几个分组就写几个颜色
colors <- c("red","blue","green")
colors <- colors[as.numeric(as.factor(dfGroup[,1]))]
# 设置点形状,仅供参考
# shape<-16:18
# shape<-shape[as.numeric(as.factor(dfGroup[,1]))]
# 计算PC值,并替换列名,用来替换坐标轴上的标签
# pVar <- pca_result$sdev^2/sum(pca_result$sdev^2)
# pVar = round(pVar,digits = 3)
# colnames(pca_result$x) = c(
# paste0("PC1 (",as.character(pVar[1] * 100 ),"%)"),
# paste0("PC2 (",as.character(pVar[2] * 100 ),"%)"),
# paste0("PC3 (",as.character(pVar[3] * 100 ),"%)"),
# "PC4",
# "PC5",
# "PC6",
# "PC7",
# "PC8",
# "PC9"
s3d <- scatterplot3d(pca_result$x[,1:3],
pch = 16, # 点形状
color=colors, # 点颜色
cex.symbols = 2 # 点大小
# 设置图例
legend("top",
legend = unique(dfGroup[,1]),
col = c("red","blue","green"),
pch = 16,
inset = -0.1,
xpd = TRUE,
horiz = TRUE)
# 设置文字标注
text(s3d$xyz.convert(pca_result$x[,c(1,2,3)] + 2),
labels = row.names(pca_result$x),
cex = 0.8,col = "black")
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
7. ROC曲线
# 加载R包,没有安装请先安装 install.packages("包名")
library(pROC)
library(ggplot2)
# 读取ROC数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/ROC/demo.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
# ROC计算
rocobj <- roc(df[,1], df[,2],
# controls=df[,2][df[,1]=="Good"], # 可以设置实验组或对照组
# cases=df[,2][df[,1]=="Poor"],
smooth = F # 曲线是否光滑,当光滑时,无法计算置信区间
# 计算临界点/阈值
cutOffPoint <- coords(rocobj, "best")
cutOffPointText <- paste0(round(cutOffPoint[1],3),"(",round(cutOffPoint[2],3),",",round(cutOffPoint[3],3),")")
# 计算AUC值
auc<-auc(rocobj)[1]
# AUC的置信区间
auc_low<-ci(rocobj,of="auc")[1]
auc_high<-ci(rocobj,of="auc")[3]
# 计算置信区间
ciobj <- ci.se(rocobj,specificities=seq(0, 1, 0.01))
data_ci<-ciobj[1:101,1:3]
data_ci<-as.data.frame(data_ci)
x=as.numeric(rownames(data_ci))
data_ci<-data.frame(x,data_ci)
ggroc(rocobj,
color="red",
size=1,
legacy.axes = F # FALSE时 横坐标为1-0 specificity;TRUE时 横坐标为0-1 1-specificity
theme_classic()+
geom_segment(aes(x = 1, y = 0, xend = 0, yend = 1), # 绘制对角线
colour='grey',
linetype = 'dotdash'
geom_ribbon(data = data_ci, # 绘制置信区间
aes(x=x,ymin=X2.5.,ymax=X97.5.), # 当legacy.axes=TRUE时, 把x=x改为x=1-x
fill = 'lightblue',
alpha=0.5)+
geom_point(aes(x = cutOffPoint[[2]],y = cutOffPoint[[3]]))+ # 绘制临界点/阈值
geom_text(aes(x = cutOffPoint[[2]],y = cutOffPoint[[3]],label=cutOffPointText),vjust=-1) # 添加临界点/阈值文字标签
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
8. 雷达图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggradar) # 此包需要从github安装 devtools::install_github("ricardo-bion/ggradar")
library(ggplot2)
# 读取雷达图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/radarChart/demo.csv",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
sep = ",", # 指定文件分隔符
header = T # 指定第一行是列名
ggradar(df,
grid.max = max(df[,-1]), # 设置坐标轴的最大值
grid.mid = max(df[,-1])/2, # 设置坐标轴的中间值
grid.min = 0, # 设置坐标轴的最小值
grid.label.size = 4, # 坐标轴百分比标签大小
axis.label.size = 5, # 组名标签字体大小
group.colours = rainbow(length(df[,1])), # 设置颜色,数量跟第一列的个数相同
background.circle.colour = "white", # 设置背景颜色
group.point.size = 2, # 点大小
group.line.width = 2, # 线条粗细
plot.legend = T, # 是否显示图例
legend.position = "right", # 图例位置"top", "right", "bottom", "left"
legend.title = "", # 图例标题
legend.text.size = 10, # 图例文字大小
plot.title = "Title", # 标题名称
plot.extent.x.sf = 1.2, # 设置图片横向延伸空间,防止外圈文字显示不全
plot.extent.y.sf = 1.2, # 设置图片纵向延伸空间,防止外圈文字显示不全
# 更多选项?ggradar查看,支持ggplot2其他函数扩展
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
9. 箱线图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(reshape2) # 用于转换数据
library(ggsignif) # 用于添加显著性标签
# 读取箱线图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/BoxPlot/boxplot.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
# 把数据转换成ggplot常用的类型(长数据)
df = melt(df)
ggplot(df,aes(x=variable,y=value,fill=variable))+
# stat_boxplot(geom = "errorbar", # 添加误差线
# width=0.3)+
geom_boxplot(alpha = 1, # 透明度
outlier.color = "black" # 外点颜色
theme_bw()+ # 白色主题
theme(
axis.text.x = element_text(angle = 90,
vjust = 0.5
) # x轴刻度改为倾斜90度,防止名称重叠
geom_signif( # 添加显著性标签
comparisons=list(c("Sample1","Sample2"),c("Sample3","Sample4")), # 选择你想在哪组上添加标签
step_increase = 0.1,
test="t.test", # "t 检验,比较两组(参数)" = "t.test","Wilcoxon 符号秩检验,比较两组(非参数)" = "wilcox.test"
map_signif_level=F # 标签样式F为数字,T为*号
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
10. 小提琴图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(reshape2)
library(ggsignif)
# 读取小提琴图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/BoxPlot/boxplot.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
# 把数据转换成ggplot常用的类型(长数据)
df = melt(df)
ggplot(df,aes(x=variable,y=value,fill=variable))+
geom_violin(alpha = 1, # 透明度
trim = T, # 是否修剪尾巴,即将数据控制到真实的数据范围内
scale = "area", # 如果“area”(默认),所有小提琴都有相同的面积(在修剪尾巴之前)。如果是“count”,区域与观测的数量成比例。如果是“width”,所有的小提琴都有相同的最大宽度。
theme_bw()+ # 白色主题
theme(
axis.text.x = element_text(angle = 90,
vjust = 0.5
) # x轴刻度改为倾斜90度,防止名称重叠
geom_signif( # 添加显著性标签
comparisons=list(c("Sample1","Sample2"),c("Sample3","Sample4")), # 选择你想在哪2组上添加标签
step_increase = 0.1,
test="t.test", # "t 检验,比较两组(参数)" = "t.test","Wilcoxon 符号秩检验,比较两组(非参数)" = "wilcox.test"
map_signif_level=F # 标签样式F为数字,T为*号
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
11. 核密度图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(reshape2)
# 读取核密度图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/BoxPlot/boxplot.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
# 把数据转换成ggplot常用的类型(长数据)
df = melt(df) # melt出自reshape2包
head(df) # 查看转换完成的数据的前几行
ggplot(df,aes(x=value,
fill=variable, # fill填充颜色,根据变量名赋值
colour=variable))+ # colour图形边界颜色,根据变量名赋值
geom_density(alpha=0.2, # 填充颜色透明度
size=1, # 线条粗细
linetype = 1 # 线条类型1是实线,2是虚线
theme_bw() # 白色主题
# 补充知识:
# fill 一般是指填充颜色
# color 一般是指线和点的颜色
# colour 一般是指图形边界颜色
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
12. 双向柱形图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(reshape2)
# 读取双向柱形图数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/ggplot2/DoublePositionBarPlot/demo.txt") # 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
# 把数据转换成ggplot常用的类型(长数据)
df = melt(df) # melt出自reshape2包
head(df) # 查看转换完成的数据的前几行
# X variable value
# 1 Pathway1 Up 35
# 2 Pathway2 Up 27
# 3 Pathway3 Up 58
# 4 Pathway4 Up 24
# 5 Pathway5 Up 4
# 6 Pathway6 Up 58
ggplot(df, aes(
x = factor(X,levels = unique(X)), # 将第一列转化为因子,目的是显示顺序与文件顺序相同,否则按照字母顺序排序
y = ifelse(variable == "Up", value, -value), # 判断分组情况,将两个柱子画在0的两侧
fill = variable)) +
geom_bar(stat = 'identity')+ # 画柱形图
coord_flip()+ # x轴与y轴互换位置
geom_text( # 在图形上加上数字标签
aes(label=value, # 标签的值(数据框的第三列)
# vjust = ifelse(variable == "Up", -0.5, 1), # 垂直位置。如果没有coord_flip(),则可以取消这行注释
hjust = ifelse(variable == "Up", -0.4, 1.1) # 水平位置
size=2 # 标签大小
scale_y_continuous( # 调整y轴
labels = abs, # 刻度设置为绝对值
expand = expansion(mult = c(0.1, 0.1))) # 在y轴的两侧,留下一部分的空白位置,防止加标签的时候,显示不全
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
13. 相关性热图
# 加载R包,没有安装请先安装 install.packages("包名")
library(pheatmap)
# 读取相关性热图数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Cor/demo.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T,
row.names = 1
# 计算相关性
r <- cor(df,
method = "pearson", # 计算相关性的方法有"pearson", "spearman", "kendall"
use = "pairwise.complete.obs" # 缺失值处理的方式
# 绘制热图
pheatmap(r,
show_colnames = TRUE, # 是否显示列名
show_rownames=TRUE, # 是否显示行名
fontsize=5, # 字体大小
color = colorRampPalette(c('#0000ff','#ffffff','#ff0000'))(50), # 指定热图的颜色
annotation_legend=TRUE, # 是否显示图例
border_color=NA, # 边框颜色 NA表示没有
scale="none", # 指定归一化的方式。"row"按行归一化,"column"按列归一化,"none"不处理
cluster_rows = TRUE, # 是否对行聚类
cluster_cols = TRUE # 是否对列聚类
)
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
14. 相关性矩阵
# 加载R包,没有安装请先安装 install.packages("包名")
library(corrgram)
# 读取相关性矩阵数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Cor/demo2.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T,
row.names = 1
corrgram(df,
cex.labels = 0.8, # 样本文字大小
lower.panel="panel.pts", # 指定下方面板的形状,具体参数看下方注释
upper.panel="panel.cor", # 指定上方面板的形状,具体参数看下方注释
diag.panel="panel.density",# 指定中间面板的形状,具体参数看下方注释
cor.method="pearson") # 计算相关性的方法有"pearson", "spearman", "kendall"
# 上、下面板可供选择的图形
# "散点" = "panel.pts"
# "柱形" = "panel.bar"
# "相关系数(带置信区间)"="panel.conf"
# "相关系数(带颜色)"="panel.cor"
# "ellipse"="panel.ellipse"
# "填充"="panel.fill"
# "饼图"="panel.pie"
# "阴影"="panel.shade"
# "空"=NULL
# 中间面板可供选择的图形
# "核密度图" = "panel.density"
# "最大最小值" = "panel.minmax"
# "空"=NULL
# 更多参数可以输入 ?corrgram 查看
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
14. 富集气泡图
library(ggplot2)
# 读取富集气泡图数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/bubble/data.txt")# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
ggplot(df,aes(x = Ratio,
y = reorder(Term,Enrichment,sum), # 按照富集度大小排序
size = Size,
colour=Enrichment)) +
geom_point(shape = 16) + # 设置点的形状
labs(x = "Ratio", y = "Pathway")+ # 设置x,y轴的名称
scale_colour_continuous( # 设置颜色图例
name="Enrichment", # 图例名称
low="green", # 设置颜色范围
high="red")+
scale_radius( # 设置点大小图例
range=c(2,4), # 设置点大小的范围
name="Size")+ # 图例名称
guides(
color = guide_colorbar(order = 1), # 决定图例的位置顺序
size = guide_legend(order = 2)
theme_bw() # 设置主题
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
15. 词云图
library(jiebaRD)
library(jiebaR)
library(wordcloud2)
# 先将一段文字转成词频
text = "蛋白质组(Proteome)的概念最先由Marc Wilkins提出,指由一个基因组(genome),或一个细胞、组织表达的所有蛋白质(Protein). 蛋白质组的概念与基因组的概念有许多差别,它随着组织、甚至环境状态的不同而改变. 在转录时,一个基因可以多种mRNA形式剪接,并且,同一蛋白可能以许多形式进行翻译后的修饰. 故一个蛋白质组不是一个基因组的直接产物,蛋白质组中蛋白质的数目有时可以超过基因组的数目. 蛋白质组学(Proteomics)处于早期“发育”状态,这个领域的专家否认它是单纯的方法学,就像基因组学一样,不是一个封闭的、概念化的稳定的知识体系,而是一个领域. 蛋白质组学集中于动态描述基因调节,对基因表达的蛋白质水平进行定量的测定,鉴定疾病、药物对生命过程的影响,以及解释基因表达调控的机制. 作为一门科学,蛋白质组研究并非从零开始,它是已有20多年历史的蛋白质(多肽)谱和基因产物图谱技术的一种延伸. 多肽图谱依靠双向电泳(Two-dimensional gel electrophoresis, 2-DE)和进一步的图象分析;而基因产物图谱依靠多种分离后的分析,如质谱技术、氨基酸组分分析等."
initialize = worker(stop_word="stopwords.txt")
# 停止词文件可以在这里下载https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/wordcloud/stopwords.txt
df<-freq(initialize[text]) # 计算词频
wordcloud2(df,
size = 1, # 字体大小
fontFamily = 'Segoe UI', # 字体
fontWeight = 'bold', # 字体粗细
color = 'random-dark', # 字体颜色
backgroundColor = "white", # 背景颜色
minRotation = -pi/4, # minRotation和maxRotation控制文本旋转角度的范围
maxRotation = pi/4,
rotateRatio = 0.4, # 文本旋转的概率 0.4表示大约有40%的词发生了旋转
shape = "circle" # 轮廓形状
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
16. 多边形树状图
# voronoiTreemap包的安装方式为
# devtools::install_github("uRosConf/voronoiTreemap")
library(voronoiTreemap)
# 读取多边形树状图数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/treemap/2.txt")# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
# 生成层次结构
data_int = vt_input_from_df(df,
hierachyVar0 = "h1", # 定义哪列是第1个层次
hierachyVar1 = "h2", # 定义哪列是第2个层次
hierachyVar2 = "h3", # 定义哪列是第3个层次
colorVar = "color", # 定义每个多边形的颜色
weightVar = "size", # 定义每个多边形的大小
labelVar = "abbreviation"# 定义每个多边形的缩写标签
vt_d3(vt_export_json(data_int),
legend= T, # 是否显示图例
label = T # 是否显示文字标签
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
17. 时间序列分析
# Mfuzz包的安装方式为:BiocManager::install("Mfuzz")
library(Mfuzz)
# 读取时间序列分析数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/mfuzz/all_gene_fpkm.xls",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
row.names = 1
# 构建对象,填补缺失值,标准化等
dm <- data.matrix(df) # 数据框转换为矩阵
ESet <- new("ExpressionSet",exprs = dm) # 构建对象
ESet <- filter.NA(ESet, thres=0.25) # 过滤缺失值超过“25%”的基因
ESet <- fill.NA(ESet,mode="knn") # knn算法填补缺失值
ESet <- filter.std(ESet,min.std=0) # 根据标准差去除样本间差异太小的基因
gene.s <- standardise(ESet) # 标准化
exprs(gene.s) # 查看处理后的数据
c <- 6 # 设置聚类个数
m <- mestimate(gene.s) # 评估出最佳的m值
set.seed(123) # 设置随机种子,防止每次聚类的结果都不一样,无法复现
cl <- mfuzz(gene.s, c = c, m = m)
cl # 查看每个基因聚到哪个类当中
cl$size # 查看每个cluster中的基因个数
cl$membership # 查看基因和cluster之间的membership。如果两个基因对于一个特定的cluster都有高的membership score,那么他们通常来说表达模式是相似的
mfuzz.plot(
gene.s,
mfrow=c(2,3),# 图形排列方式,2行3列
new.window= FALSE) # 是否在新窗口打开
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
18. 云雨图
详细的内容可以参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
19. 棒棒糖图
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggpubr)
library(ggplot2)
# 读取棒棒糖图数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/lolly/demoData.txt")
ggdotchart(df,
x = colnames(df)[1],
y = colnames(df)[2],
color = colnames(df)[1],
palette = rainbow(dim(df)[1]), # 修改颜色
sorting = "none", # 排列方式 sorting = c("ascending", "descending", "none"),
add = "segments", # 添加线条add = c("none", "segment")
dot.size = 10, # 点大小
add.params = list(color = "lightgray", size = 5), #修改线条参数,颜色,粗细
position = position_dodge(0.1), #调整位置
label = round(df[[2]]), #添加数字标签
font.label = list(color = "white", # 设置数字标签参数,颜色,大小,位置
size = 9,
vjust = 0.5)
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
20. 累积曲线
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(reshape2)
# 读取累积曲线数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/ecdf/demo.txt",
row.names = 1)
df = melt(df) # reshape2中的函数,宽数据转换为长数据
df$value = log(df$value) # 为方便观察,做log变化,以实际数据是否需要为准
ggplot(df,
x=value,
color=variable
stat_ecdf( # ggplot2中的经验累积分布函数
size=2 # 线条粗细
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
21. 频率分布直方图
library(ggplot2)
# 创建数据框1到100的随机数100个
random = sample(1:100, 100, replace = T)
df = data.frame(random)
seq = seq(0,100,10) # 提前设置区间
ggplot(df,
aes(x=df[,1],
fill=cut(df[,1],seq) # 添加颜色,填充依据是seq
geom_histogram(breaks=seq, # 设置break区间
color="white", # 柱子的边框颜色
size=0.5, # 边框大小
stat="bin")+
geom_text( #加标签
aes(label=gsub("^0$", "", as.character(..count..))), # 内容为统计数字并去除0
stat="bin",
vjust=-0.5, # 垂直位置
size=4, # 标签大小
breaks=seq)+ # 标签位置
theme_classic()+
theme(
legend.position = "none", # 隐藏图例
plot.title = element_text( # 标题居中并加粗
face = "bold",
hjust = 0.5)
labs( # 调整坐标轴名称
x = "x轴标题",
y = "y轴名称",
title = "标题名称"
)
详细的内容可参考:
22. 相互作用网络图
library(tidyverse)
library(networkD3)
# 读取连线文件和节点文件
MisLinks = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Network/link.csv",sep = ",")
MisNodes = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Network/node.csv",sep = ",")
# 处理数据
# 因为networkD3需要的连线数据,是节点文件里的名称的索引。所以,需要做一个名称到索引的转化
Node2index = list()
Node2index[MisNodes$name] = 0:length(MisNodes$name)
MisLinks = MisLinks %>%
mutate(source2 = unlist(Node2index[source])) %>%
mutate(target2 = unlist(Node2index[target]))
# 定义颜色
group2project = paste(unique(MisNodes$group),collapse = '","')
color2project = paste(unique(MisNodes$group_color),collapse = '","')
my_color <- paste0('d3.scaleOrdinal().domain(["',group2project,'"]).range(["',color2project,'"])')
forceNetwork(Links = MisLinks,
Nodes = MisNodes,
Source = "source2",
Target = "target2",
Value ="value",
NodeID = "name",
Group = "group",
opacity= 1, # 透明度
Nodesize="size",
zoom = TRUE, # 是否可以缩放
opacityNoHover=1, # 鼠标没有悬浮在节点上时,文字的透明度(0-1)
colourScale = JS(my_color), # 节点颜色,JavaScript
legend=T,
fontSize = 10,
linkColour= MisLinks$colour
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
23. 桑基图
library(networkD3)
library(tidyverse)
# 读取连线文件和节点文件
MisLinks = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/sankeyNetwork/link.csv",sep = ",")
MisNodes = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/sankeyNetwork/node.csv",sep = ",")
# 处理数据
# 因为networkD3需要的连线数据,是节点文件里的名称的索引。所以,需要做一个名称到索引的转化
Node2index = list()
Node2index[MisNodes$name] = 0:length(MisNodes$name)
MisLinks = MisLinks %>%
mutate(source2 = unlist(Node2index[source])) %>%
mutate(target2 = unlist(Node2index[target]))
# 定义颜色
color2project = paste(unique(MisNodes$group_color),collapse = '","')
my_color <- paste0('d3.scaleOrdinal().domain(["',color2project,'"]).range(["',color2project,'"])')
sankeyNetwork(Links = MisLinks,
Nodes = MisNodes,
Source = "source2",
Target = "target2",
Value ="value",
NodeID = "name",
NodeGroup = "group_color",
colourScale = JS(my_color),
fontSize = 10
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
24. 散点密度图
library(ggpointdensity)
library(ggplot2)
# 读文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/scatterDensity/demo.txt")
ggplot(df,aes(x=df[,1],
y=df[,2])
geom_pointdensity(adjust = 4)+ # adjust:设置neighbors范围
theme_bw()+
scale_color_distiller(palette = "Spectral", direction = -1) # 设置连续型颜色
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
25. PCoA主坐标分析
# 加载R包,没有安装请先安装 install.packages("包名")
library(ggplot2)
library(ade4) # 用于计算PcoA
library(vegan) # 用于计算距离
# 读取PCoA数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCoA/data.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
header = T, # 指定第一行是列名
row.names = 1 # 指定第一列是行名
df=t(df) # 对数据进行转置,如果想对基因分组则不用转置
# 读取样本分组数据文件
dfGroup = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCoA/class.txt",
header = T,
row.names = 1
# PCoA计算
df.dist = vegdist(df,method='euclidean') #基于euclidean距离
pcoa = dudi.pco(df.dist,
scannf = F, # 一种逻辑值,指示是否应该显示特征值条形图
nf=2) # 保留几个维度的坐标信息
# 整理绘图所需的数据
data = pcoa$li
data$name = rownames(data)
data$group = dfGroup$Group
ggplot(data,aes(x = A1,
y = A2,
color = group,
group = group,
fill = group
geom_point()+
theme_classic()+
geom_vline(xintercept = 0, color = 'gray', size = 0.4) + # 在0处添加垂直线条
geom_hline(yintercept = 0, color = 'gray', size = 0.4) +
stat_ellipse(aes(x=A1, # 添加置信区间圈
y=A2,
geom = "polygon",
level = 0.95,
alpha=0.4)+
geom_text( # 添加文本标签
aes(label=name),
vjust=1.5,
size=2,
color = "black"
labs( # 更改x与y轴坐标为pcoa$eig/sum(pcoa$eig)
x = paste0("PCoA1 (",as.character(round(pcoa$eig[1] / sum(pcoa$eig) * 100,2)),"%)"),
y = paste0("PCoA2 (",as.character(round(pcoa$eig[2] / sum(pcoa$eig) * 100,2)),"%)")
)
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
26. seqlogo序列标识图
library(ggseqlogo)
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/bioladder1/seqLogo/demoData.txt",header = F)
csl = c()
# # 自定义每个字母的颜色
# csl <- make_col_scheme(chars = c("A"), cols = c("red"))
ggseqlogo(df,
method = "prob", # 定义统计方式"prob"百分比;bits;“custom”
col_scheme = csl) # 定义颜色方案
# 其他基于ggplot2的代码也可以用,略
详细的内容可参考:
不想写代码?可以用BioLadder生信云平台在线绘图:
27. 富集弦图
# 转载所需要的包
library(tidyverse) # 用于数据处理
library(GOplot) # 用于绘图 安装方式 devtools::install_github("wencke/wencke.github.io")
library(RColorBrewer) # 颜色
# 读取数据
dfTerm = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/bioladder1/GOplot/demoData1.txt")
dfFC = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/bioladder1/GOplot/demoData2.txt")
# 整理数据
dfClean = dfTerm %>%
separate_rows(Genes,sep = ",") %>%
left_join(dfFC,by=c("Genes"="Gene"))
dfPlot = chord_dat(data.frame(dfClean), process=unique(dfClean$Term))
GOChord(dfPlot,
title="GOChord plot", # 标题名称
space = 0.02, # 基因方格之间的空隙
gene.order = "logFC", # 基因的排序方式,可以按照"logFC", "alphabetical", "none",