【问题标题】:manual bin size selection in R ggplot geom.tile function?R ggplot geom.tile函数中的手动bin大小选择?
【发布时间】:2020-06-03 23:39:54
【问题描述】:

有没有一种方法可以手动设置大小不同的 bin 大小并在特定颜色代码之后为它们着色?

我想要一个带有 binsizes 的热图:0-0.05、0.05-0.25、0.25-0.5、0.5-0.75 和 0.75-1 对于 bin 0-0.05,我想要设置颜色:"#ecefb7" 对于剩余的 bin,我想要从 low="#7fc8b9"high="#3a81b5" 的渐变。

我确实设法获得了图例中的垃圾箱,但没有使用特定的颜色编码。也许有人知道我如何做到这一点?

样本最小数据:

    Group sample     pvalue
1   OG0000010:Up  EB1_D 0.04900000
2 OG0000050:Down  EB1_D 0.19019725
3   OG0000638:Up  EB1_D 0.52008137
4   OG0000010:Up  EN1_D         NA
5   OG0000050:Down  EN1_D 0.01615993
6 OG0000638:Up  EN1_D 0.48958058

我目前使用的代码:

ggplot(pvaldata2, aes(x=sample, y=Group)) + 
  geom_tile(colour="black", size=0.25, aes(fill=pvalue)) +
  scale_fill_gradient(low="#ecefb7", high="#3a81b5", na.value = "white",
                      breaks = c(0.05, 0.25, 0.5, 0.75), 
                      labels = c("0.05", "0.25", "0.5", "0.75")) +
  theme(axis.text.y = element_text(size = 8))

生成的热图但仍具有错误的 bin 颜色:

【问题讨论】:

  • 使用 cut 将连续变量分解为间隔,然后使用像 ColorBrewer 中的顺序填充比例(或自己制作)
  • fyi,最好使用dput 提供示例数据,因为可以将其直接粘贴到 R 中。

标签: r ggplot2


【解决方案1】:

您可以通过更改为scale_fill_gradientn、将limits 设置为c(0, 1)、在矢量中指定所有颜色并将它们的位置作为values 中的矢量来完全控制色阶。在你的情况下,看起来像这样:

ggplot(pvaldata2, aes(x = sample, y = Group)) + 
  geom_tile(colour="black", size = 0.25, aes(fill = pvalue)) +
  scale_fill_gradientn(colours = c(rep("#ecefb7", 2), "#7fc8b9", "#3a81b5"),
                       na.value = "white",
                       values = c(0, 0.05, 0.0501, 1),
                       limits = c(0, 1)) +
  theme(axis.text.y = element_text(size = 8))

如您所见,这已将NA 着色为白色,低于 0.05 的 p 值(即使是非常接近 0.05 的值)以所需的浅黄色着色,其余部分以所选渐变着色。

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2016-12-28
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多