Использование тепловой карты для отражения различий между фреймами корреляции и отображения только нижнего треугольника - PullRequest
0 голосов
/ 02 мая 2018

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)

и р4

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 голосов
/ 02 мая 2018

Если 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...