R语言绘制 | ATGC数量柱状图

原文教程:R语言绘制 | ATGC数量柱状图 |Nature

本期教程

获得本教程Data and Code,请在后台回复:20240812

2022年教程总汇

https://mp.weixin.qq.com/s/Lnl258WhbK2a8pRZFuIyVg

2023年教程总汇

https://mp.weixin.qq.com/s/wCTswNP8iHMNvu5GQauHdg

Code

  1. 导入R包
library(RColorBrewer)
library(pheatmap)
library(tidyverse)
library(viridis)
library(reshape2)
filter = dplyr::filter
  1. 导入对应数据
input <- read.csv(file="data_Spectra_Input.csv")

head(input)
> head(input)
  sampleID   chr       pos ref mut type   effect     gene trinuc_ref sub trinuc_ref_py firstbase thirdbase py_ref
1 PD46845a  chr2 157766005   C   A  Sub missense    ACVR1        CCT C>A           CCT         C         T      C
2 PD51536a chr14 104780108   A   C  Sub missense     AKT1        GAG T>G           CTC         C         C      T
3 PD42673a chr14 104780214   C   T  Sub missense     AKT1        TCC C>T           TCC         T         C      C
4 PD46732a  chr5 112821985   G   T  Sub nonsense      APC        TGA C>A           TCA         T         A      C
5 PD51821a  chr5 112838196   G   T  Sub nonsense      APC        AGA C>A           TCT         T         T      C
6 PD51600a chr19  46921195   C   A  Sub nonsense ARHGAP35        ACC C>A           ACC         A         C      C
  py_alt context
1      A C[C>A]T
2      G C[T>G]C
3      T T[C>T]C
4      A T[C>A]A
5      A T[C>A]T
6      A A[C>A]C
AA_exposed <- read.csv(file="data_AA_Input.csv")
head(AA_exposed)
> head(AA_exposed)
    Sample Country SBS22a SBS22b SBS22a_relative SBS22b_relative
1 PD37463a Romania   6878   8024          0.3119          0.3639
2 PD37464a Romania    660   1049          0.1196          0.1901
3 PD37466a Romania   1349   1301          0.2088          0.2014
4 PD37469a Romania      0   2539          0.0000          0.3993
5 PD37484a Romania   3718   7772          0.2712          0.5670
6 PD42572a  Serbia   4015   3463          0.3788          0.3268
  1. 提取、计算、分析
### 绘图函数
plot_driver_spectra = function(input, plot_title) {
  #Collect Data
  mutations = input
  #Define contexts
  matrix_contexts <- c('A[C>A]A', 'A[C>A]C', 'A[C>A]G', 'A[C>A]T', 'C[C>A]A', 'C[C>A]C', 'C[C>A]G', 'C[C>A]T',
                       'G[C>A]A', 'G[C>A]C', 'G[C>A]G', 'G[C>A]T', 'T[C>A]A', 'T[C>A]C', 'T[C>A]G', 'T[C>A]T',
                       'A[C>G]A', 'A[C>G]C', 'A[C>G]G', 'A[C>G]T', 'C[C>G]A', 'C[C>G]C', 'C[C>G]G', 'C[C>G]T', 
                       'G[C>G]A', 'G[C>G]C', 'G[C>G]G', 'G[C>G]T', 'T[C>G]A', 'T[C>G]C', 'T[C>G]G', 'T[C>G]T',
                       'A[C>T]A', 'A[C>T]C', 'A[C>T]G', 'A[C>T]T', 'C[C>T]A', 'C[C>T]C', 'C[C>T]G', 'C[C>T]T',
                       'G[C>T]A', 'G[C>T]C', 'G[C>T]G', 'G[C>T]T', 'T[C>T]A', 'T[C>T]C', 'T[C>T]G', 'T[C>T]T',
                       'A[T>A]A', 'A[T>A]C', 'A[T>A]G', 'A[T>A]T', 'C[T>A]A', 'C[T>A]C', 'C[T>A]G', 'C[T>A]T',
                       'G[T>A]A', 'G[T>A]C', 'G[T>A]G', 'G[T>A]T', 'T[T>A]A', 'T[T>A]C', 'T[T>A]G', 'T[T>A]T',
                       'A[T>C]A', 'A[T>C]C', 'A[T>C]G', 'A[T>C]T', 'C[T>C]A', 'C[T>C]C', 'C[T>C]G', 'C[T>C]T',
                       'G[T>C]A', 'G[T>C]C', 'G[T>C]G', 'G[T>C]T', 'T[T>C]A', 'T[T>C]C', 'T[T>C]G', 'T[T>C]T',
                       'A[T>G]A', 'A[T>G]C', 'A[T>G]G', 'A[T>G]T', 'C[T>G]A', 'C[T>G]C', 'C[T>G]G', 'C[T>G]T',
                       'G[T>G]A', 'G[T>G]C', 'G[T>G]G', 'G[T>G]T', 'T[T>G]A', 'T[T>G]C', 'T[T>G]G', 'T[T>G]T')
  #Count Occurances
  freq=c(table(mutations$context))
  mutations_ctx=data.frame(ctxt=matrix_contexts,counts=freq[matrix_contexts])
  mutations_ctx <- tibble::column_to_rownames(mutations_ctx,"ctxt")
  mutations_ctx[is.na(mutations_ctx)] = 0
  rownames(mutations_ctx) <- NULL
  
  #Plot!
  # Specify Context Type
  sig_cat = c("C>A","C>G","C>T","T>A","T>C","T>G")
  ctx_vec = paste(rep(c("A","C","G","T"),each=4),rep(c("A","C","G","T"),times=4),sep="-")
  full_vec = paste(rep(sig_cat,each=16),rep(ctx_vec,times=6),sep=",")
  snv_context = paste(substr(full_vec,5,5), substr(full_vec,1,1), substr(full_vec,7,7), sep="")
  # Specify Vectors for plot colours
  col_vec_num <- rep(16,6)
  col_vec = rep(c("dodgerblue","black","red","grey70","olivedrab3","plum2"),each=16)
  # Convert to matrix
  sig_plot <- as.matrix(mutations_ctx)
  # Set up Signature Names and title
  sig_title <- colnames(sig_plot)
  # Set up Counts
  sample_counts <- colSums(mutations_ctx)
  # Set par settings
  par(xaxs='i', cex = 1, xpd = FALSE)
  #  define maxy
  max_prob <- sig_plot[,1];maxy = max(max_prob)
  #  call empty plot
  b = barplot(sig_plot[,1], col = NA, border = NA, axes = FALSE, las = 2, ylim=c(0,1.5*maxy), 
              names.arg = snv_context, cex.lab = 1.3, cex.names = 0.70, cex.axis = 2, 
              space = 1, ylab = "Mutation Count")  
  # add axis
  axis(2, at = pretty(0:(1.5*maxy), n = 3), col = 'grey90', las = 1, cex.axis = 1.5)
  # call columns
  b = barplot(sig_plot[,1], axes = FALSE, col=col_vec, add = T, border = NA, space = 1)
  # add box surronding plot
  box(lty = 1, col = 'grey90')
  # add title
  title(plot_title, line = -1.5, adj = 0.01, cex.main = 2)
  title(paste0("Total SNV: ", sample_counts), line = -1, adj = 0.99, cex.main = 1)
  # add rectangles and annotations on top of the plot
  par(xpd = NA)
  for (j in 1:length(sig_cat)) {
    xpos = b[c(sum(col_vec_num[1:j])-col_vec_num[j]+1,sum(col_vec_num[1:j]))]
    rect(xpos[1]-0.5, maxy*1.5, xpos[2]+0.5, maxy*1.6, border=NA, col=unique(col_vec)[j])
    text(x=mean(xpos), pos=3, y=maxy*1.6, label=sig_cat[j], cex = 1.25)
  } 
}
  1. 提取、计算、分析
#Subset only for cases with >10% COSMIC attribution to either AA signatures

input_AA <- subset(input, (sampleID %in% AA_exposed$Sample))
input_nonAA <-subset(input, (!sampleID %in% AA_exposed$Sample))
  1. 绘图
plot_driver_spectra(input_AA,"AA exposed")

获得本教程Data and Code,请在后台回复:20240812

若我们的教程对你有所帮助,请点赞+收藏+转发,这是对我们最大的支持。

往期部分文章

1. 最全WGCNA教程(替换数据即可出全部结果与图形)


2. 精美图形绘制教程

3. 转录组分析教程

4. 转录组下游分析

小杜的生信筆記 ,主要发表或收录生物信息学教程,以及基于R分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容