Масштабирование цветов тепловых карт для нескольких тепловых карт
Поэтому у меня есть куча матриц, которые я пытаюсь построить в виде тепловых карт. Я использую 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