Создание тепловых карт в R было предметом многих сообщений, обсуждений и итераций. Моя основная проблема заключается в том, что сложно сочетать визуальную гибкость решений, доступных в решетке levelplot()
или базовой графике image()
, с легкой кластеризацией базовых heatmap()
, pheatmap pheatmap()
или gplots 'heatmap.2()
. Это крошечная деталь, которую я хочу изменить - диагональную ориентацию меток на оси х. Позвольте мне показать вам свою точку зрения в коде.
#example data
d <- matrix(rnorm(25), 5, 5)
colnames(d) = paste("bip", 1:5, sep = "")
rownames(d) = paste("blob", 1:5, sep = "")
Вы можете легко изменить ориентацию по диагонали с помощью levelplot()
:
require(lattice)
levelplot(d, scale=list(x=list(rot=45)))
но применение кластеризации кажется болью. Таким образом, другие визуальные варианты, такие как добавление границ вокруг ячеек теплообмена.
Теперь, переходя к действительным связанным функциям heatmap()
, кластеризация и все базовые визуальные эффекты суперпросты - почти не требуется настройка:
heatmap(d)
и так далее:
require(gplots)
heatmap.2(d, key=F)
и, наконец, мой любимый:
require(pheatmap)
pheatmap(d)
Но у всех из них нет возможности повернуть метки. Руководство для pheatmap
предполагает, что я могу использовать grid.text
для настройки моих меток. Какая радость - особенно при кластеризации и изменении порядка отображения ярлыков. Если я не пропущу что-то здесь...
Наконец, есть старый хороший image()
. Я могу повернуть метки, в общем, это "наиболее настраиваемое решение, но не кластеризация".
image(1:nrow(d),1:ncol(d), d, axes=F, ylab="", xlab="")
text(1:ncol(d), 0, srt = 45, labels = rownames(d), xpd = TRUE)
axis(1, label=F)
axis(2, 1:nrow(d), colnames(d), las=1)
Итак, что мне делать, чтобы получить мою идеальную, быструю карту тепла, с кластеризацией и ориентацией и приятными визуальными функциями взлома? Моя лучшая ставка меняет heatmap()
или pheatmap()
так или иначе, потому что эти два, кажется, наиболее универсальны в настройке. Но любые решения приветствуются.