我想创建一个相关热图矩阵。我关注了this tutorial。这是代码:
mydata <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(mydata),2)
# Get upper triangle of the correlation matrix
get_lower_tri <- function(cormat){
cormat[upper.tri(cormat)]<- NA
return(cormat)
}
lower_tri <- get_lower_tri(cormat)
library(reshape2)
melted_cormat <- melt(lower_tri, na.rm = TRUE)
# Heatmap
library(ggplot2)
ggplot(data = melted_cormat, aes(Var2, Var1, fill = value))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "blue", high = "red", mid = "white",
midpoint = 0, limit = c(-1,1), space = "Lab",
name="Pearson\nCorrelation") +
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, vjust = 1,
size = 12, hjust = 1))+
coord_fixed()
问题是ggplot
更改了行顺序。实际上,这是矩阵的下三角:
> lower_tri
mpg disp hp drat wt qsec
mpg 1.00 NA NA NA NA NA
disp -0.85 1.00 NA NA NA NA
hp -0.78 0.79 1.00 NA NA NA
drat 0.68 -0.71 -0.45 1.00 NA NA
wt -0.87 0.89 0.66 -0.71 1.00 NA
qsec 0.42 -0.43 -0.71 0.09 -0.17 1
我想获得与lower_tri
矩阵完全相似的热图结构,即所需的图是这样的:
但是我不明白。
答案 0 :(得分:0)
在显示的图像中,按照惯例,Var1轴沿正确的方向移动(底部为1,顶部为6)。只是在此矩阵的上下文中看起来不正确。
不过有一个简单的解决方法:您只需反转melted_cormat
的Var1列中的因子水平即可
ggplot(
data = melted_cormat,
aes(Var2, forcats::fct_rev(Var1), fill = value)
) +
geom_tile(color = "white") +
scale_fill_gradient2(
low = "blue", high = "red", mid = "white", midpoint = 0,
limit = c(-1,1), space = "Lab", name="Pearson\nCorrelation"
) +
theme_minimal() +
theme(
axis.text.x = element_text(
angle = 45, vjust = 1, size = 12, hjust = 1)
) +
coord_fixed()
[我希望scale_y_reverse
可以解决此问题,但因某些原因而失败]