Создайте динамическую c тепловую карту в R - PullRequest
0 голосов
/ 14 июля 2020

Я хочу создать фрагмент кода, который позволяет мне создавать тепловую карту на основе значений в df. Однако значения не всегда появляются (например, некоторые наборы данных содержат 4 класса, некоторые 3 и некоторые 2).

Например, один df может выглядеть так:

column <- c(rep(c(1),5),rep(c(2),5),rep(c(3),5),rep(c(4),5),rep(c(5),5))
row <- rep(1:5, 5)
class <- c(0,0,1,2,1,2,2,3,0,1,2,3,1,2,0,1,0,0,2,3,3,2,2,2,1)
df <- data.frame(column, row, class)
df

Принимая во внимание другой будет иметь такое же количество строк, но только классы 0, 1 и 3 (например).

Я хочу раскрасить соответствующие сетки следующими логами c:

class 0 = red
class 1 = green
class 2 = blue
class 3 = grey

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

NB: количество строк данных всегда будет одинаковым и размер тепловой карты всегда будет одинаковым.

1 Ответ

1 голос
/ 14 июля 2020

С помощью ggplot вы можете создать именованный вектор со значениями вашего класса и цветами, которые вы хотите, а затем использовать scale_fill_manual.

library(ggplot2)
set.seed(123)
column <- c(rep(c(1),5),rep(c(2),5),rep(c(3),5),rep(c(4),5),rep(c(5),5))
row <- rep(1:5, 5)
class <- c(0,0,1,2,1,2,2,3,0,1,2,3,1,2,0,1,0,0,2,3,3,2,2,2,1)
df <- data.frame(column, row, class)


cols <- c('0' = 'red', '1' = 'green', '2' = 'blue', '3' = 'grey')
ggplot(df, aes(column, row, fill= factor(class))) + 
  geom_tile()+
  scale_fill_manual(values = cols)

...