Масштабирование цветов тепловых карт для нескольких тепловых карт

Поэтому у меня есть куча матриц, которые я пытаюсь построить в виде тепловых карт. Я использую heatmap.2() функция в пакете ggplot2.

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

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

Я попытался сделать что-то похожее на этот вопрос:

R / ggplot: повторно использовать цветовой ключ для нескольких тепловых карт

Но я не смог понять ggplot функция; Я продолжал получать сообщение об ошибке, в котором говорилось, что на графике "нет слоев".

Прочитав комментарии к вышеупомянутому вопросу, я попытался использовать scales::rescale() а также discrete_scale() но первое не снимает проблему, в то время как второе не работает.

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

Что касается самих данных, я пытаюсь построить 10 матриц / тепловых карт, каждая ячейка 10х10 (показывающая изменение во времени), а значения в ячейках варьируются от 1,0 до 1,2.

Например, это код, который я использую (когда у меня есть матрица 10х10).

Matrix1<-matrix(data=(runif(100,1.0,1.2)),nrow=10,ncol=10)
heatmap.2(Matrix1, Colv=NA, Rowv=NA, dendrogram="none",
    trace="none", key=F, cellnote=round(Matrix1,digits=2),
    notecex=1.6, notecol="black",
    labRow=seq(10,100,10), labCol=seq(10,100,10),
    main="Title1", xlab="Xlab1", ylab="Ylab1"
 )

Так что любая помощь с выяснением, как создать масштабированные значения для heatmap.2() функция, или как я могу использовать ggplot() функция будет принята с благодарностью!

2 ответа

Решение

Важно отметить, что heatmap.2 это не ggplot2 функция. ggplot2 Пакет не обязательно совместим со всеми типами печати. Если вы посмотрите на ?heatmap.2 Страница справки, в левом верхнем углу она показывает, откуда взялась функция. heatmap.2 {gplots} означает, что функция исходит от gplots пакет. Это разные пакеты, поэтому у них разные правила работы.

Чтобы получить одинаковые цвета на разных тепловых картах, вы хотите явно получить breaks= параметр. По умолчанию он разбивает наблюдаемый диапазон данных на равные куски. Но поскольку каждый набор данных может иметь разные минимальные и максимальные значения, эти порции могут иметь разные начальные и конечные точки. Указав breaksВы можете сделать их последовательными. Поскольку ваши данные варьируются от 1 до 1,2, вы можете установить

mybreaks <- seq(1.0, 1.2, length.out=7)

а затем в свой звонок добавить

heatmap.2(Matrix1, Colv=NA, Rowv=NA, dendrogram="none",
    ...
    breaks=mybreaks,
    ...
 )

Это должно заставить их всех совпадать.

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

data(mtcars)
require(ggplot2)
require(gridExtra)


myplotslist2 <- list()
var = c("mpg", "wt", "drat")
new = cbind(mtcars, "variable")
new = cbind(car = rownames(mtcars), new)
for (i in 1:length(var)){
  t= paste("new[[\"variable\"]] = \"", var[[i]],"\"; a = ggplot(new, aes(variable, car)) + geom_tile(aes(fill = ", var[[i]], "),colour = \"white\") + scale_fill_gradient(low = \"red\", high = \"green\") + theme(axis.title.y=element_blank(), axis.text.y=element_blank(),legend.position=\"none\"); myplotslist2[[i]] = a")
  eval(parse(text=t))
}


grid.arrange(grobs=myplotslist2, ncol=length(var))

Результат выглядит так: Тепловая карта

Надеюсь, это поможет.

Я объясню больше в моем блоге. https://dwh-businessintelligence.blogspot.nl/2016/05/pca-3d-and-k-means.html

Другие вопросы по тегам