Tips:
https://deeptools.readthedocs.io/en/develop/content/tools/plotCorrelation.html
我们比较样本的重复性,一般都是用deeptools
中 plotCorrelation
画散点图。比如下面类似的命令.
### Step1 multiBamSummary
$ multiBamSummary bins
--bamfiles *.uniq.bam
--minMappingQuality 30
-out scores_per_transcript.npz
--outRawCount scores_per_transcript.tab
### Step2 plotCorrelation
$ deepTools2.0/bin/plotCorrelation \
-in scores_per_transcript.npz \
--corMethod pearson --skipZeros \
--plotTitle "Pearson Correlation of Average Scores Per Transcript" \
--whatToPlot scatterplot \
-o scatterplot_PearsonCorr_bigwigScores.png \
--outFileCorMatrix PearsonCorr_bigwigScores.tab
得到图:
假设只有tab
文件,但plotCorrelation
只能识别npz
格式(numpy
存储的格式。类似R
里面.RData
一样,存储特定数据结构),要怎么才可以画图?
也就是说tab
格式如何转化成npz
格式呢?
查看npz 里面是什么东西 读取npz 的方法:菜鸟教程
类似字典,有labels 和matrix 两个键。我们将tab整理成这个格式就可以了。
实践:
1. 下载文章数据 41556_2019_383_MOESM9_ESM.xlsx ,发现数据都是excel 格式保存的。如下图:
需要读取excel 的sheet 里面的数据,保存为fig1b_scatterplot.csv。
R代码:
########################
rm(list=ls())
options(warn = -1)
options(stringsAsFactors = F)
setwd("C:/Users/16926/Desktop/2020-1/单细胞/sc-ChIP")
##############
## 1.加载包,读取xlsx(最新格式)
## 参考:
## 1.不同R包比较 https://www.jianshu.com/p/5ed6e4b5d181
## 2.openxlsx::read.xlsx 参数介绍 :https://blog.csdn.net/zyunnketsu/article/details/78053179
##############
library(openxlsx)
a<-read.xlsx("41556_2019_383_MOESM9_ESM.xlsx",
sheet=1,startRow = 14)#文件名+sheet的序号,简单粗暴
head(a)
s1 <- object.size(a)
print(sl, units = "auto", standard = "SI")
write.csv(a,file = "./fig1/fig1b_scatterplot.csv",row.names = F)
提取到fig1b_scatterplot.csv 内容如下:
2.将fig1b_scatterplot.csv 转换成npz 格式
####################
## time:2020/3/23 10:27
## author: caokai
## email:1692679247@qq.com
## aim : convert csv format to npz format to use deeptools software
####################
####################
## 1.加载模块
import os
import numpy as np
import pandas as pd
os.chdir("C:/Users/16926/Desktop/2020-1/单细胞/sc-ChIP/fig1")
os.listdir(".")
####################
## 2.读取及其保存格式
## 参考:np:https://www.runoob.com/numpy/numpy-io.html
## pd: https://blog.csdn.net/xidianbaby/article/details/88831145
## mian:https://blog.csdn.net/yuzhihuan1224/article/details/99634355?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
dat = pd.read_csv("fig1b_scatterplot.csv")
labels = np.array(dat.columns[3:], dtype="|S22") # 去除前三列,labels转换成np np.array([bytes(c, encoding='utf8') for c in dat.columns])
matrix = dat.iloc[:,3:].values # 去除前三列,value转换成np np.array(dat[dat.columns[3:]])
## 计算log10(FPM)
matrix = np.log10(matrix+1)
## 保存为npz 格式
np.savez(r"fig1.scatterplot.npz",
labels = labels,
matrix = matrix)
data_z = np.load("fig1.scatterplot.npz")
print(data_z.files) # 查看各个数组名称
print(data_z["labels"]) # 数组 labels
print(data_z["matrix"]) # 数组 matrix
所以我们得到了fig1.scatterplot.npz 数据,可以直接画图了。
3.deeptools 画图
plotCorrelation -in fig1.scatterplot.npz
--corMethod pearson
--skipZeros --plotTitle 'Pearson Correlation'
--whatToPlot scatterplot
--removeOutliers
-o fig1_scatterplot_PearsonCorr.png
--outFileCorMatrix fig1_scatterplot_PearsonCorr.tab
散点图如下图:
总结思考:
- 读取Excel 的包推荐
openxlsx
- 了解
npy
和npz
差别,及其numpy修改数据格式的方式。
np.array(dat.columns[3:], dtype="|S22")
,将字符串转换成bite 类型。 -
deeptoools
无法对数据进行log10 scale
(只提供--log1p
:自然对数e
)
颜色deeptools --colorMap
参数,画散点图没有用.
欢迎大家讨论~