R ggplot масштабировать вручную, используя цвета для значений в пределах диапазона

#r #ggplot2 #range #heatmap #geom

#r #ggplot2 #диапазон #тепловая карта #геометрия

Вопрос:

Я просто надеюсь очистить свой код и кое-чему научиться. Я чувствую, что делаю это сложнее, чем должно быть. У меня есть диапазон данных от 0 до 9, и я хотел бы указать цвет для значений в этом диапазоне. Например:

 0-3 green
4-6 yellow
7-9 red
 

Это единственный способ, которым я смог заставить его работать. Я чувствую, что должен быть способ указать диапазоны в разрывах. т.е. 0-3 = зеленый и т.д.

 ggplot()  
  geom_raster(data = data, aes(x = samples, y = organism, fill = as.factor(value)))  
  scale_fill_manual(values=c("green", "green", "green","green", "yellow","yellow","yellow", "red","red", "red"), breaks=c(0,1,2,3,4,5,6,7,8,9))
 

Следующий код работает нормально, но всякий раз, когда я пытаюсь создать диапазон в пределах разрывов, я получаю сообщение об ошибке:

 breaks=c(0-3,4-6,7-9)
Error: Insufficient values in manual scale. 10 needed but only 3 provided.
 

Я надеюсь, что это достаточно понятно. При необходимости я могу предоставить образец набора данных (ниже). Спасибо за ваше время!

 samples,organism,value
a,z,0
b,z,1
c,z,2
d,z,3
e,z,4
f,z,5
g,z,6
h,z,7
i,z,8
j,z,9
 

Комментарии:

1. Всегда добавляйте данные, это помогает.

Ответ №1:

У меня нет ваших данных, но я сделал некоторые, которые, как мне кажется, похожи на ваши:

 set.seed(123)
data <- expand.grid(samples = 1:5, organism = LETTERS[1:4])
data$value <- sample(0:9, 20, replace = TRUE)
 

С этими данными я получаю другую ошибку при запуске вашего кода:

 ggplot()  
  geom_raster(data = data, aes(x = samples, y = organism, fill = value))  
  scale_fill_manual(values=c("green", "green", "green", "green", "yellow", "yellow", "yellow", "red", "red", "red"), 
                    breaks=c(0,1,2,3,4,5,6,7,8,9))
Error: Continuous value supplied to discrete scale
 

Если я преобразую value в коэффициент, я не получаю ошибки. Мне понадобятся ваши данные, чтобы помочь диагностировать ошибку.

 ggplot()  
  geom_raster(data = data, aes(x = samples, y = organism, fill = factor(value)))  
  scale_fill_manual(values=c("green", "green", "green", "green", "yellow", "yellow", "yellow", "red", "red", "red"), 
                    breaks=c(0,1,2,3,4,5,6,7,8,9))
 

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

Используя мои данные, вот более простой способ сделать это (особенно если value непрерывный):

 ggplot()  
  geom_raster(data = data, aes(x = samples, y = organism, 
                               fill = cut(value, breaks = c(0, 3, 6, 9))))  
  scale_fill_manual(name = "value", 
                    values = c("green", "yellow", "red"),
                    labels = c("0-3", "4-6", "7-9"))
 

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

Комментарии:

1. Спасибо за вашу помощь! Я разъяснил ошибку, которую я получал в вопросе. Использование функции cut было именно тем, что мне было нужно. Оглядываясь назад, я определенно должен был включить данные. Это было из огромного набора данных, но я мог бы добавить некоторые данные-заполнители.

2. Одно дополнительное редактирование вашего решения, список вырезов должен быть «c (-1,3, 6, 9)»