使用R中的ggplot生成热图表的每个类别的渐变颜色

时间:2018-04-16 17:37:07

标签: r ggplot2 gradient heatmap

我正在尝试使用 R 中的ggplot生成热图表。我的数据看起来像这样:

dt <- cbind(rbinom(1:10,100,0.9), rbinom(1:10,100,0.5), rbinom(1:10,100,0.2), rbinom(1:10,100,0.05)
colnames(dt) <- c("A","B","C","D")

我想为每个类别使用不同的渐变颜色来强调每个值的重要性。由于值的范围很大,因此较小的数字将着色几乎相同。这就是为什么,我想使用不同的颜色。我的代码在这里:

library(dplyr)
library(ggplot2)
library(reshape2)
library(scales)

dt <- cbind(rbinom(1:10,100,0.9), rbinom(1:10,100,0.5), rbinom(1:10,100,0.2), rbinom(1:10,100,0.01))
colnames(dt) <- c("A","B","C","D")

dt <- melt(dt)

dt %>%
    ggplot(aes(Var2,Var1)) +
    geom_tile(aes(fill = value), colour = "white") +
    geom_text(aes(fill = dt$value, label = dt$value, 3), size = 4) +
    scale_fill_gradient2(low = "green", mid = "yellow", high = "red", midpoint = 0.05) +
theme(panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.background = element_rect(fill = "white"),
    axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, size = 10, face = "bold"),
    plot.title = element_text(size = 20, face = "bold"),
    axis.text.y = element_text(size = 10, face = "bold")) +
ggtitle("Heatmap Table") +
theme(legend.title = element_text(face = "bold", size = 14)) +
scale_x_discrete(name = "") +
scale_y_discrete(name = "") +
labs(fill = "Heatmap") 

情节如下:

enter image description here

每个类别的颜色应该是渐变的。我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

假设我正确地解释了你的问题,我改变了映射到fill的变量。我没有使用原始值,而是按Var2分组并计算了相对值,因此每个值都与其组中的其他值进行比例缩放 - 例如。该值如何与A组中的所有其他值进行比较。

我还从q.io.deq geom_text中取出3,因为它似乎是一个错字。这使得文本geoms每个都采用与相应tile相同的位置。

这种方法的一个缺点是,图例上的标签现在没有多大意义,或者至少需要一些解释来说明价值是针对他们的群体进行缩放的。

编辑:我将颜色渐变的中点更改为0.5而不是之前的0.05,因此缩放后值仍会显示最小颜色。

aes

reprex package(v0.2.0)创建于2018-04-16。

相关问题