ggplot2 ::scale_fill_gradient в R — пользовательских цветах

#r #ggplot2

#r #ggplot2

Вопрос:

Пожалуйста, нужна помощь с scale_fill_gradient() в ggplot2 . Рассмотрим этот простой пример:

 library(tidyverse)

set.seed(3)
dat <- as.data.frame(matrix(runif(100, 0, 1), ncol = 10))

# turn from wide to long

dat2 <- dat %>%
  rownames_to_column("model_1") %>%
  gather(model_2, value, -model_1) %>%
  mutate(model_1 = model_1 %>% factor(levels = 1:10),
         model_2 = factor(gsub("V", "", model_2), levels = 1:10))

## plot data

ggplot(dat2, aes(model_1, model_2))  
  geom_tile(aes(fill = value))   
  geom_text(aes(label = round(value, 2)))  
  scale_fill_gradient(low = "yellow", high = "white")
  

Что я хотел бы сделать, так это иметь пользовательские правила затенения. Например, что-то вроде:

  • value < 0.05 : ярко-желтый
  • value >= 0.05 amp; value < 0.15 : бледно-желтый
  • value >= 0.15 : белый
  • is.na(value) : белый

Есть ли какой-нибудь простой способ сделать это, пожалуйста? Боюсь, я действительно не следую документации для scale_fill_gradient() .

Спасибо.

Ответ №1:

Вы можете попробовать добавить цвет вручную:

 dat2 <- dat2 %>%
  mutate(
    my_color = case_when(
      value < 0.05 ~ "#FFFF00"  ,
      value >= 0.05 amp; value < 0.15 ~ "#FFFFCC",
      TRUE ~ "#FFFFFF"
    )
  )

ggplot(dat2, aes(model_1, model_2))  
      geom_tile(aes(fill = my_color))   
      geom_text(aes(label = round(value, 2)))  
      scale_fill_identity()
  

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