setwd("D:/desktop/snp可视化/")
library(circlize)
#----initialize----
chr <- read.csv("zb1_chr_length.csv")
head(chr)
circos.genomicInitialize(chr,axis.labels.cex = 0.8,
labels.cex =1)
# 使用 circos.genomicInitialize 函数初始化 circos 绘图
# `chr` 参数为染色体长度的数据框
# `axis.labels.cex` 参数设置坐标轴标签的字体大小
# `labels.cex` 参数设置其他标签(e.g., 染色体名字)的字体大小
#----gc content----
gc <- read.table("zb1s3.genome.gc",header = T)
# 创建一个圆环图中的基因组轨道
circos.genomicTrack(
gc, # 使用上述读取到的数据框作为输入数据
track.height = 0.1, # 设置轨道的高度为0.1
bg.col = '#EEEEEE6E', # 设置背景颜色为'#EEEEEE6E'
bg.border = NA, # 设置背景边框颜色为透明(NA)
# 使用自定义函数作为轨道的面板函数(panel function)
panel.fun = function(region, value, ...) {
# 在轨道上绘制基因组线条(region为基因组区域,value为对应的值)
circos.genomicLines(region, value, col = '#4862AC', lwd = 0.35, ...)
# 在轨道上绘制水平参考线
circos.lines(c(0, max(region)), c(35.31, 35.31), col = '#4862AC', lwd = 0.15, lty = 2)
# 绘制y轴刻度线和标签
circos.yaxis(labels.cex = 0.2, lwd = 0.1, tick.length = convert_x(0.15, 'mm'))
}
)
#----gene density----
# 读取名为"all.gene.gff.csv"的文件,并将其作为数据框存储在变量"gene"中
gene <- read.csv("all.gene.gff.csv")
# 输出"gene"数据框的前几行
head(gene)
# 计算基因密度(每百万个碱基)。
# 选择"type"为"gene"的数据,并选取前3列(chromosome、start和end)作为输入数据
den <- genomicDensity(gene[gene$type=='gene',][1:3], window.size = 1e6, count_by = "number")
# 找出基因密度的最大值
value_max <- max(den$value)
# 定义颜色选择函数,使用colorRampPalette生成颜色选项
colorsChoice <- colorRampPalette(c('white', '#7FCBA3'))
# 根据最大值和颜色选项生成颜色映射
color_assign <- colorRamp2(breaks = c(0:value_max), col = colorsChoice(value_max + 1))
# 在圆环图的区域绘制基因密度轨道
circos.genomicTrackPlotRegion(
den, # 使用上述计算得到的基因密度作为输入数据
track.height = 0.1, # 设置轨道的高度为0.1
stack = TRUE, # 将区域叠加显示
bg.border = NA, # 设置背景边框颜色为透明(NA)
# 使用自定义函数作为轨道的面板函数(panel function)
panel.fun = function(region, value, ...) {
# 在区域上绘制矩形,并根据基因密度的值分配颜色
circos.genomicRect(region, value, col = color_assign(value[[1]]), border = NA, ...)
}
)
# 计算mRNA密度(每百万个碱基)
genomicDensity(gene[gene$type=='mRNA',][1:3], window.size = 1e6, count_by = "number")
# 在圆环图中绘制mRNA密度轨道
circos.genomicDensity(
gene[gene$type=='mRNA',][1:3], # 选择"type"为"mRNA"的数据,并选取前3列作为输入数据
col = c("#FBD683"), # 设置颜色为"#FBD683"
track.height = 0.1, # 设置轨道的高度为0.1
bg.border = NA, # 设置背景边框颜色为透明(NA)
bg.col = "#EEEEEE6E" # 设置背景颜色为"#EEEEEE6E"
)
# 计算非编码RNA密度(包括miRNA、rRNA、snRNA和tRNA)
genomicDensity(
gene[gene$type=='miRNA' | gene$type=='rRNA' | gene$type=='snRNA' | gene$type=='tRNA',][1:3],
window.size = 1e6, count_by = "number")
# 在圆环图中绘制非编码RNA密度轨道
circos.genomicDensity(
gene[gene$type=='mRNA',][1:3], # 选择"type"为"mRNA"的数据,并选取前3列作为输入数据
col = c("#F26D42"), # 设置颜色为"#F26D42"
track.height = 0.1, # 设置轨道的高度为0.1
bg.border = NA, # 设置背景边框颜色为透明(NA)
bg.col = "#EEEEEE6E" # 设置背景颜色为"#EEEEEE6E"
)
#-----绘制图例-----
library(ComplexHeatmap)
library(stringr)
# 创建GC图例
gc_legend <- Legend(
at = 1, # 图例中的位置,默认为1
labels = c(str_c('GC % ( Average: ', 35.31, ' % )')), # 图例中显示的标签
labels_gp = gpar(fontsize = 8), # 图例字体大小
grid_height = unit(0.5, 'cm'), # 图例的高度
grid_width = unit(0.5, 'cm'), # 图例的宽度
type = 'lines', # 图例类型为线
background = '#EEEEEE6E', # 图例的背景颜色
legend_gp = gpar(col = 'blue', lwd = 0.5) # 图例的样式,蓝色边界和0.5的线宽
)
# 创建基因密度图例
gene_lengd <- Legend(
at = round(seq(0, max(den$value), length.out = 6), 0), # 图例的位置,使用最大值和刻度数来计算位置
labels_gp = gpar(fontsize = 8), # 图例字体大小
col_fun = colorRamp2(round(seq(0, max(den$value), length.out = 6), 0),
colorRampPalette(c('white', '#7FCBA3'))(6)), # 图例的颜色变化
title_position = 'topleft', # 图例标题的位置
title = 'Gene density', # 图例标题
legend_height = unit(2, 'cm'), # 图例的高度
title_gp = gpar(fontsize = 9) # 图例标题的字体样式
)
# 创建mRNA图例
mRNA_legend <- Legend(
at = 1, # 图例中的位置,默认为1
labels = c('mRNA'), # 图例中显示的标签
labels_gp = gpar(fontsize = 8), # 图例字体大小
title_gp = gpar(fontsize = 9), # 图例标题的字体样式
grid_height = unit(0.4, 'cm'), # 图例的高度
grid_width = unit(0.4, 'cm'), # 图例的宽度
type = 'points', # 图例类型为点
pch = NA, # 点的样式为空,表示只显示颜色
background = c('#FBD683') # 图例的背景颜色
)
# 设置坐标推移量
y_coord <- 0.8
x_coord <- 0.87
# 在指定位置绘制GC图例
pushViewport(viewport(x = x_coord + 0.011, y = y_coord))
grid.draw(gc_legend)
# 更新坐标推移量
y_coord <- y_coord - 0.25
upViewport()
# 在指定位置绘制基因密度图例
pushViewport(viewport(x = x_coord - 0.02, y = y_coord))
grid.draw(gene_lengd)
# 更新坐标推移量
y_coord <- y_coord - 0.2
upViewport()
# 在指定位置绘制mRNA图例
pushViewport(viewport(x = x_coord - 0.02, y = y_coord))
grid.draw(mRNA_legend)
upViewport()
# 清除圆环图
circos.clear()
# 关闭绘图设备
dev.off()
R circlize基础绘图
于 2024-01-10 16:08:52 首次发布