R: затенение определенных плиток с использованием geom_tile

library(tidyverse)
## make data
set.seed(3)
dat <- matrix(runif(100, 0, 1), ncol=10)

## reshape data (tidy/tall form)
dat2 <- dat %>%
  tbl_df() %>%
  rownames_to_column('Var1') %>%
  gather(Var2, value, -Var1) %>%
  mutate(
    Var1 = factor(Var1, levels=1:10),
    Var2 = factor(gsub("V", "", Var2), levels=1:10)
  )

## plot data
frames <- data.frame(Var1 = c(1, 1, 3, 4),
                     Var2 = c(8, 10, 3, 2))
ggplot(dat2, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 1))) +
  scale_fill_gradient(low = "white", high = "red") +
  geom_rect(data=frames, size=1, fill=NA, colour="black",
            aes(xmin=Var1 - 0.5, xmax=Var1 + 0.5, ymin=Var2 - 0.5, ymax=Var2 + 0.5))

введите описание изображения здесь

У меня есть тепловая карта, и я настроил ее так, чтобы определенные плитки имели черные границы, указав data.frame с именем frames содержать местоположение плитки, а затем передать это в geom_rect,

Я бы хотел полностью закрасить 2 плитки черным, но изменить цвет текста на белый. Следующий data.frame содержит расположение этих 2 плиток:

frames_shade <- data.frame(Var1 = c(3, 9), Var2 = c(5, 2))

Какую функцию я могу использовать для этого?

1 ответ

Решение

Наложить другой geom_tile... Я добавил последнее утверждение вместо вашего прямоугольника. Это дает вам черные прямоугольники. Я думаю, что последняя строка будет делать ваш белый текст, но во фрейме данных фреймов должны быть эти текстовые значения. Это даст ошибку прямо сейчас, потому что значение не в кадрах.

ggplot(dat2, aes(Var1, Var2)) +
geom_tile(aes(fill = value)) +  
geom_text(aes(label = round(value, 1))) +
scale_fill_gradient(low = "white", high = "red") +
geom_tile(data=frames,fill="black")  #+ 
#geom_text(data=frames,aes(label = round(value, 1)),colour="white") 
Другие вопросы по тегам