使用热图来反映相关数据帧之间的差异并仅显示较低的三角形

时间:2018-05-02 16:10:49

标签: r ggplot2 heatmap r-corrplot

Correlation heat map

我使用以下内容生成上面的热图:

heat_map <- ggplot(melt_p4, aes(Var1, Var2)) +
  geom_tile(aes(fill = value), color = "white") +
  labs(title = "ST - LT Correlation Across Factor") +
  scale_fill_gradient(low = "red", high = "green") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  geom_text(aes(label = round(value, 1)), size = 2.2)

其中melt_p4是

melt_p4 <- melt(p4)

和p4是

p4 <- correlations_3months - correlations_history

,其中

correlations_3months <- round(cor(Raw_Index_3months_xts_Returns[-1,]),2)
correlations_history <- round(cor(Raw_Index_History_xts_Returns[-1,]),2)

热图基本上是一个数据帧,它从短期相关数据帧中减去长期相关数据帧。因此,我想知道是否有一个可以与热图一起使用的参数,以便只显示下三角形(在所有0的对角线下方)。否则,我会在热图的上半部分和下半部分获得镜像。这可能吗?

也希望我已经为这个问题提供了足够的代码。

1 个答案:

答案 0 :(得分:0)

如果p4是矩阵,您可以将upper.tri用作:

p4[upper.tri(p4)] <- NA
melt_p4 <- melt(p4)
melt_p4 <- melt_p4[!is.na(melt_p4$value),]

colnames(melt_p4) <- c("Var1", "Var2", "value")

ggplot(melt_p4, aes(Var1, Var2)) +
  geom_tile(aes(fill = value), color = "white") +
  labs(title = "ST - LT Correlation Across Factor") +
  scale_fill_gradient(low = "red", high = "green") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  geom_text(aes(label = round(value, 1)), size = 2.2) +
  theme_bw() +
  scale_x_discrete(expand=c(0,0)) + 
  scale_y_discrete(expand=c(0,0)) 

enter image description here

样本数据

set.seed(1)
p4 <- matrix(runif(16, 0, 1), nrow = 4, ncol = 4)

row.names(p4) <- c("A", "B", "C", "D")
colnames(p4) <- c("A", "B", "C", "D")