如何更改R中的heatmap.2颜色范围?

时间:2013-07-23 20:12:33

标签: r colors heatmap

我正在使用gplot生成热图,显示治疗组与配对对照的log2倍变化。使用以下代码:

 heatmap.2(as.matrix(SeqCountTable), col=redgreen(75), 
           density.info="none", trace="none", dendrogram=c("row"), 
            symm=F,symkey=T,symbreaks=T, scale="none") 

我输出的热图具有真正的倍数变化值(即非Row-Z得分),这是我所追求的,是每个生物学家最喜欢的红黑绿配色方案!

http://i.stack.imgur.com/uhFbP.jpg

log2倍变化的实际范围是-3 / + 7,其中许多值在-2 / -1和+ 1 / + 2范围内,分别显示为深红色/绿色(分别)。这使整个热图非常暗,难以解释。

  • 有没有办法扭曲颜色渐变,使其线性度降低?也就是说,在较小的范围内发生从黑色到非常明亮的梯度?
  • 和/或改变颜色范围是不对称的,即从-3 / + 7开始,如数据那样,而不是当前比例为-7 / + 7,黑色仍然以零为中心?

4 个答案:

答案 0 :(得分:14)

只需将symkey参数更改为FALSE

,我就可以将颜色范围设为不对称
symm=F,symkey=F,symbreaks=T, scale="none"

使用breaks参数解决colorRampPalette的颜色问题,以指定每种颜色的范围,例如

colors = c(seq(-3,-2,length=100),seq(-2,0.5,length=100),seq(0.5,6,length=100))

my_palette <- colorRampPalette(c("red", "black", "green"))(n = 299)

heatmap.2(as.matrix(SeqCountTable), col=my_palette, 
    breaks=colors, density.info="none", trace="none", 
        dendrogram=c("row"), symm=F,symkey=F,symbreaks=T, scale="none")

答案 1 :(得分:13)

您可以尝试使用RColorBrewer

创建自己的调色板
my_palette <- colorRampPalette(c("green", "black", "red"))(n = 1000)

看看这是怎么回事。但我认为在你的情况下,如果你真的想把黑色保持在“中间”,那么只有缩放会有所帮助。您只需使用my_palette代替redgreen()

即可

我建议您查看RColorBrewer package,它们内置非常漂亮的调色板,并查看交互式website for colorbrewer

答案 2 :(得分:0)

我认为您需要设置symbreaks = FALSE 这应该允许不对称的色标。

答案 3 :(得分:0)

以下是未使用<?php echo 'Shows the page ID (correct)=' . $post->ID; $args = array( 'post_type' => 'accommodation', 'posts_per_page' => '9999', ); $wp_query = new WP_Query( $args ); if ($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?> <option value="<?php the_ID(); ?>"><?php echo the_title(); ?></option> <?php endwhile; else : esc_html_e('No bookings','sohohotel'); endif; wp_reset_postdata(); echo 'Shows the ID of the last post in the loop (not correct)=' . $post->ID; ?> 的人的另一种选择(heatmap.2很好!)

从输入矩阵的最小值到最大值创建100个值的顺序向量,找到最接近0的值,将两个颜色矢量与期望的中点相结合,组合并使用它们:

aheatmap