簡體   English   中英

使用R中的ggplot生成熱圖表的每個類別的漸變顏色

[英]Gradient color for each category to generate a heatmap table using ggplot in R

我正在嘗試使用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") 

情節看起來像這樣:

熱圖表

每個類別的顏色應該是漸變的。 我非常感謝任何幫助。

假設我正確地解釋了你的問題,我改變了映射到fill的變量。 而不是原始值,我按Var2分組並計算相對值,因此每個值都與其組中的其他值進行比較 - 例如,該值與A組中的其他值相比如何。

我也從你的geom_text aes取出3,因為它看起來像是一個錯字。 這使得文本geoms每個都采用與相應tile相同的位置。

這種方法的一個缺點是圖例上的標簽現在沒有很多含義,或者至少需要一些解釋來說明值是針對它們的組進行縮放的。

編輯 :我將顏色漸變的中點更改為0.5而不是之前的0.05,因此縮放值后仍會顯示最小顏色。

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 %>%
    group_by(Var2) %>%
# make a variable for the value scaled in relation to other values in that group
    mutate(rel_value = value / max(value)) %>% 
    ggplot(aes(Var2,Var1)) +
    geom_tile(aes(fill = rel_value), colour = "white") +
# take out dt$...
# take out 3 from aes
    geom_text(aes(label = value), size = 4) +
    scale_fill_gradient2(low = "green", mid = "yellow", high = "red", midpoint = 0.5) +
    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")                      

reprex包 (v0.2.0)於2018-04-16創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM