1.原始的FPKM数据a5


选择其中的KO2和NC进行处理

View(a5)
a4=a5[,c(2,3)]
View(a4)
a6=a4a7=log2(a6+0.0005)col = colorRampPalette(colors = c("blue","white","red"))(80)
##col = colorRampPalette(c("lightblue","lightyellow","orange","#FF6A6A"),bias=1)(300)
##300表示色阶,从高到低300个色阶,如果设置5个色阶,即可切成5块View(a7)
colnames(a7)=c("KO","NC")
pheatmap(a7,angle_col = 45,cellheight = 2,cellwidth = 80,color=col, show_rownames = F,fontsize_col=15)

最终得到的结果图

在这里值得注意的是数据的处理过程。

实际应用中,异常值的出现会毁掉一张热图。这通常不是我们想要的。为了更好的可视化效果,需要对数据做些预处理,主要有对数转换,Z-score转换,抹去异常值,非线性颜色等方式。

Pheatmap的数据需要进行转换,常见的转换有
1.对数转换

a7=log2(a6+0.0005)
  1. +1是为了防止对0取对数;是加1还是加个更小的值取决于数据的分布。
    加的值一般认为是检测的低阈值,低于这个值的数字之间的差异可以忽略。(主要看数据的分布范围,如果较大的数据较多,较少的数据较小,可以加的小点,拉开差距。

2.抹去异常值,比如下面这张图,红框里面的数据整体偏大,会影响数据的整体归一化过程,可以选择将大于30的值(看数据分布情况)赋值30

a3[a3>30] <-30  #将a3中的大于30的值赋值到30


3.Z-Score处理

data <-data[apply(data,1,var)!=0,]  ##去掉方差为0的行,也就是值全都一致的行#标准化数据,获得Z-score,并转换为data.frame
data_scale <-as.data.frame(t(apply(data,1,scale)))
colnames(data_scale)<- colnames(data)

4.非线性转换
正常来讲,颜色的赋予在最小值到最大值之间是均匀分布的。非线性颜色则是对数据比较小但密集的地方赋予更多颜色,数据大但分布散的地方赋予更少颜色,这样既能加大区分度,又最小的影响原始数值。通常可以根据数据模式,手动设置颜色区间。为了方便自动化处理,我一般选择用四分位数的方式设置颜色区间。

data_ori <- "Grp_1;Grp_2;Grp_3;Grp_4;Grp_5a;6.6;20.9;100.1;600.0;5.2b;20.8;99.8;700.0;3.7;19.2c;100.0;800.0;6.2;21.4;98.6d;900;3.3;20.3;101.1;10000"data <- read.table(text=data_ori,
header=T, row.names=1, sep=";", quote="")data$ID = rownames(data)data_m = melt(data, id.vars=c("ID"))# 获取数据的最大、最小、第一四分位数、中位数、第三四分位数summary_v <- summary(data_m$value)summary_vMin.  1stQu.   Median     Mean  3rdQu.     Max. 3.30   16.05    60.00   681.40   225.80 10000.00# 在最小值和第一四分位数之间划出6个区间,第一四分位数和中位数之间划出6个区间,中位数和第三四分位数之间划出5个区间,最后的数划出5个区间
break_v <-unique(c(seq(summary_v[1]*0.95,summary_v[2],length=6),seq(summary_v[2],summary_v[3],length=6),seq(summary_v[3],summary_v[5],length=5),seq(summary_v[5],summary_v[6]*1.05,length=5)))break_v[1]    3.135     5.718    8.301    10.884    13.467   16.050    24.840[8]   33.630    42.420    51.210   60.000   101.450   142.900   184.350[15]   225.800 2794.350  5362.900  7931.450 10500.000# 安照设定的区间分割数据# 原始数据替换为了其所在的区间的数值
data_m$value <-cut(data_m$value,breaks=break_v,labels=break_v[2:length(break_v)])
break_v=unique(data_m$value)
data_m

# 虽然看上去还是数值,但已经不是数字类型了# 而是不同的因子了,这样就可以对不同的因子赋予不同的颜色了is.numeric(data_m$value)
[1] FALSEis.factor(data_m$value)
[1] TRUE
break_v
#[1] 8.301   24.84
101.45  2794.35 5.718   10500
#18 Levels: 5.718 8.301 10.884 13.467 16.05
24.84 33.63 42.42 51.21 … 10500
#产生对应数目的颜色
gradientC=c('green','yellow','red')
col <-colorRampPalette(gradientC)(length(break_v))

试剂上数据转换的格式主要取决与你的数据分布,值得夺取探索,毕竟是数学,总有他背后的规律和名堂。

放一张最开始丑的不要了的图,毕竟最开始长这个样子。后期继续修改和和美化。

Pheatmap做热图数据处理过程相关推荐

  1. 使用pheatmap画热图报错

    使用pheatmap画热图报错 报错内容: Error in hclust(d, method = method) : 外接函数调用时不能有NA/NaN/Inf(arg10) 此外: Warning ...

  2. 20180402-F · US Tuition Costs · pheatmap 绘制热图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 US Tuition Costs Average Tuition and Educational Attainmen ...

  3. matlab和r语言做热图,案例演示 | R语言绘制热图代码

    本文是个人笔记,请谨慎付费[星球用户可免费看]. 我们在分析了差异表达数据之后,经常要进行热图的可视化展示. 热图(Heat map)是一个以颜色变化来显示数据的矩阵.虽然"热图" ...

  4. pheatmap进行热图绘制

    初始的代谢组数据如下 用R包 pheatmap处理 rm(list=ls()) library(pheatmap) X = read.csv("C:/Users/tangxing/Deskt ...

  5. R语言pheatmap包热图legend位置调整

    前言 上一期用 pheatmap 包画完热图之后发现,虽然图很美观,但是图例位置有些不符合我的要求,我希望图例 (legend) 在左边,所以去看了看 pheatmap 函数具体参数,然而只有 leg ...

  6. pheatmap绘制热图

    pheatmap绘制简单热图还是很方便的,比heatmap高级,但还是比不上complexheatmap,如果有时间可以研究研究complexheatmap绘制热图. 以下是我个人用pheatmap绘 ...

  7. pheatmap画热图初试

    首先,设置工作路径: setwd() getwd() 读取基因表达矩阵,例如RSEM输出的matrix文件 data<- read.table("./file", heade ...

  8. R语言:pheatmap R包做聚类分析热图

    1.原始数据表1: 表1 原始数据 gene A B C D E gene1 0.034 0.351 0.064 0.367 0.063 gene2 0.037 0.11 0.056 0.127 0. ...

  9. pheatmap, gplots heatmap.2和ggplot2 geom_tile实现数据聚类和热图plot

    主要步骤 pheatmap 数据处理成矩阵形式,给行名列名 用pheatmap画热图(pheatmap函数内部用hclustfun 进行聚类) ggplot2 数据处理成矩阵形式,给行名列名 hclu ...

最新文章

  1. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!
  2. 一文了解卷积神经网络在股票中应用
  3. ActFramework 小贴士 - 获得应用版本
  4. 北京2019高考分数线:本科理423文480
  5. 10 个冷门但又非常实用的 Docker 使用技巧
  6. 小米与格力的10亿豪赌!
  7. PAT_B_1033_Java(20分)
  8. JS中函数和变量声明的提升
  9. 多个公证员提高网络吞吐量
  10. Apache工具包方法——Hex.encodeHexString(byte[] data)源码浅析
  11. 分析java程序的命令总结jps,jstack
  12. 由IDC机房测试谈主动工作教学实战案例!
  13. hadoop获取文件系统接口
  14. 4.Java JSON使用
  15. 主板声卡坏了会不会有电流声_选择声卡讲究多 不同领域适使用不同类型
  16. CAXA 数控车编程视频教程 CAXA车床绘图教程
  17. LR性能测试Web Page Breakdown分析篇
  18. 上位机通信标准-OPC
  19. AI算法+EasyCVR打造智慧城市,构建万物互联智能世界
  20. php做网站半成品,两小时学会用php做网站购物车

热门文章

  1. winscp怎么更改linux权限,Linux下,WinSCP普通用户登录sftp后切换到root权限 教程
  2. Ubuntu18.04安装openjdk-7-jdk
  3. Gstreamer衬垫(pad)支持的媒体类型(三)
  4. C#之http transfer-Encoding模式
  5. asp之发布给IIS
  6. dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
  7. axios 上传文件 封装_axios 封装【满足常规数据上传及file上传】
  8. linux shell脚本中 if 条件判断
  9. Java == 和 equals
  10. python中的对象_Python中的变量、对象