仅更改 ggplot2 中热图的上三角矩阵的颜色
Change color only of the upper triangle matrix of a heat map in ggplot2
我有这个融化的矩阵,我想将其绘制为热图,下部矩阵具有相关系数,上部三角形具有 P 值
> melted_corfinal
Var1 Var2 value
1 iHS iHS 1.00
2 nSL iHS 0.89
3 XP-EHH iHS 0.01
4 PBS iHS 0.00
5 iHS nSL 0.00
6 nSL nSL 1.00
7 XP-EHH nSL 0.01
8 PBS nSL 0.00
9 iHS XP-EHH 0.00
10 nSL XP-EHH 0.00
11 XP-EHH XP-EHH 1.00
12 PBS XP-EHH 0.18
13 iHS PBS 0.90
14 nSL PBS 0.41
15 XP-EHH PBS 0.00
16 PBS PBS 1.00
但是,我找不到一种方法来仅更改上三角矩阵的颜色,同时保持值不变。我希望它只是白色(背景)。
这里是我到目前为止提出的代码:
p <- ggplot(melted_corfinal, aes(Var2, Var1)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = round(value, 2))) +
scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2),low = "#fee8c8", high = "#e34a33") +
theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) +
guides(fill = guide_colorbar(barwidth = 20)) +
ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2))
plot(p)
此外,我仍然希望 table 中保留 2 个小数位,但当它们为零时它们是 "rounded"。
输入:
structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("iHS", "nSL",
"XP-EHH", "PBS"), class = "factor"), Var2 = structure(c(1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("iHS",
"nSL", "XP-EHH", "PBS"), class = "factor"), value = c(1, 0.89,
0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)), .Names = c("Var1",
"Var2", "value"), row.names = c(NA, -16L), class = "data.frame")
好的,首先我将您提供的数据转换回常规未熔化矩阵,这样我就可以轻松地将上三角设置为 NA。我使用 dcast
执行此操作。该矩阵已经是对角线和下三角的相关性以及上三角的 p 值的组合。
melted_corfinal <- structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L),
.Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"),
Var2 = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L),
.Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"),
value = c(1, 0.89, 0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)),
.Names = c("Var1", "Var2", "value"), row.names = c(NA, -16L), class = "data.frame")
cor_pval <- dcast(melted_corfinal, Var1~Var2)[, -1]
# Set to NA upper triangle excluding diagonal
cor_pval[upper.tri(cor_pval, diag=F)] <- NA
然后我将其融化并作为第二个值添加到 melted_corfinal
cor_pval_col <- melt(cor_pval)
melted_corfinal$value2 <- cor_pval_col$value
melted_corfinal
现在我们按照您的方式绘制,但是对于 geom_tile
我们使用 value2
和 NA 作为 p 值。然后我们在scale_fill_continuous
.
中设置na.value="white"
最后我使用 format
为 0 获得 2 个有效数字
p <- ggplot(melted_corfinal, aes(Var2, Var1)) +
geom_tile(aes(fill = value2)) +
scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2), low = "#fee8c8", high = "#e34a33", na.value = "white") +
geom_text(aes(label = format(value, nsmall=2))) +
theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) +
guides(fill = guide_colorbar(barwidth = 20)) +
ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2))
p
我有这个融化的矩阵,我想将其绘制为热图,下部矩阵具有相关系数,上部三角形具有 P 值
> melted_corfinal
Var1 Var2 value
1 iHS iHS 1.00
2 nSL iHS 0.89
3 XP-EHH iHS 0.01
4 PBS iHS 0.00
5 iHS nSL 0.00
6 nSL nSL 1.00
7 XP-EHH nSL 0.01
8 PBS nSL 0.00
9 iHS XP-EHH 0.00
10 nSL XP-EHH 0.00
11 XP-EHH XP-EHH 1.00
12 PBS XP-EHH 0.18
13 iHS PBS 0.90
14 nSL PBS 0.41
15 XP-EHH PBS 0.00
16 PBS PBS 1.00
但是,我找不到一种方法来仅更改上三角矩阵的颜色,同时保持值不变。我希望它只是白色(背景)。
这里是我到目前为止提出的代码:
p <- ggplot(melted_corfinal, aes(Var2, Var1)) +
geom_tile(aes(fill = value)) +
geom_text(aes(label = round(value, 2))) +
scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2),low = "#fee8c8", high = "#e34a33") +
theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) +
guides(fill = guide_colorbar(barwidth = 20)) +
ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2))
plot(p)
此外,我仍然希望 table 中保留 2 个小数位,但当它们为零时它们是 "rounded"。 输入:
structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("iHS", "nSL",
"XP-EHH", "PBS"), class = "factor"), Var2 = structure(c(1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("iHS",
"nSL", "XP-EHH", "PBS"), class = "factor"), value = c(1, 0.89,
0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)), .Names = c("Var1",
"Var2", "value"), row.names = c(NA, -16L), class = "data.frame")
好的,首先我将您提供的数据转换回常规未熔化矩阵,这样我就可以轻松地将上三角设置为 NA。我使用 dcast
执行此操作。该矩阵已经是对角线和下三角的相关性以及上三角的 p 值的组合。
melted_corfinal <- structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L),
.Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"),
Var2 = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L),
.Label = c("iHS", "nSL", "XP-EHH", "PBS"), class = "factor"),
value = c(1, 0.89, 0.01, 0, 0, 1, 0.01, 0, 0, 0, 1, 0.18, 0.9, 0.41, 0, 1)),
.Names = c("Var1", "Var2", "value"), row.names = c(NA, -16L), class = "data.frame")
cor_pval <- dcast(melted_corfinal, Var1~Var2)[, -1]
# Set to NA upper triangle excluding diagonal
cor_pval[upper.tri(cor_pval, diag=F)] <- NA
然后我将其融化并作为第二个值添加到 melted_corfinal
cor_pval_col <- melt(cor_pval)
melted_corfinal$value2 <- cor_pval_col$value
melted_corfinal
现在我们按照您的方式绘制,但是对于 geom_tile
我们使用 value2
和 NA 作为 p 值。然后我们在scale_fill_continuous
.
na.value="white"
最后我使用 format
p <- ggplot(melted_corfinal, aes(Var2, Var1)) +
geom_tile(aes(fill = value2)) +
scale_fill_continuous("",limits=c(0, 1), breaks=seq(0,1,by=0.2), low = "#fee8c8", high = "#e34a33", na.value = "white") +
geom_text(aes(label = format(value, nsmall=2))) +
theme_light() + theme(legend.position="none",axis.title.x = element_blank(),axis.title.y = element_blank()) +
guides(fill = guide_colorbar(barwidth = 20)) +
ylim(rev(levels(melted_corfinal$Var1))) + xlim(levels(melted_corfinal$Var2))
p