2017-06-06 146 views
1

我想使用颜色为绿色,黑色和红色的pheatmap制作R中的热图,并使用范围从-2到2的图例,这里是码,我用:对于低于和高于阈值的值,使用自定义色标的热图贴图

library(pheatmap) 
my_palette <- colorRampPalette(c("green", "black", "red"))(n = 201) 
colors = c(seq(as.numeric(-2),-0.01,length=100), 0, 
seq(0.01,as.numeric(2),length=100)) 

pheatmap(mFilt_annot_sort_matrix, color = my_palette, breaks = colors, scale = 
"none", cluster_rows = F, cluster_cols = F, margin = c(5,5)) 

的问题是,我想的值小于绿色-2红色比2的更大,而我的解决方案,这些价值观是白色的,你能帮帮我吗?

+0

如果您使用'dput(df)'提供样本数据集,我可以为此绘制图表。看看[如何在R中创建一个很好的重现示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – Masoud

+0

如果有人遇到了稍微不同的需求,可以参考下面的问题:[Pheatmap Color for Specific Value](https://stackoverflow.com/questions/41783245/pheatmap-color-for-specific-value) 。 – Masoud

回答

1

您需要将断点设置为-2和+2并在两者之间建立梯度。您还需要将颜色设置为小于最小值和大于最大所需值。往下看;

library(pheatmap) 

colors <- c(min(mFilt_annot_sort_matrix),seq(-2,2,by=0.01),max(mFilt_annot_sort_matrix)) 

my_palette <- c("green",colorRampPalette(colors = c("green", "black", "red")) 
                (n = length(colors)-3), "red") 


pheatmap(mFilt_annot_sort_matrix, color = my_palette, breaks = colors, scale = 
"none", cluster_rows = F, cluster_cols = F, margin = c(5,5)) 

使用正常数据的示例;

使用rnorm.within功能我提出以下数据集:

#V1 is random between -4 and 4 
#V2 is less than -2 
#V3 is greater than 2 

df <- data.frame(cbind(rnorm.within(1000, -4, 4) 
,rnorm.within(1000,-4,-3), rnorm.within(1000,3,4))) 

和应用以上(同断裂和调色板)的程序制作热图将得到:

pheatmap(df, color = my_palette, breaks = colors, scale = 
        "none", cluster_rows = F, cluster_cols = F, margin = c(5,5))