Создание тепловых карт в R - тема многих сообщений, обсуждений и итераций. Моя основная проблема заключается в том, что сложно сочетать визуальную гибкость решений, доступных в решетке levelplot()
или базовую графику image()
, с легкой кластеризацией базовых heatmap()
, peeatmap's pheatmap()
или gplots 'heatmap.2()
. Это крошечная деталь, которую я хочу изменить - диагональную ориентацию меток по оси х. Позвольте мне показать вам свою точку зрения в коде.Ориентация диагональных меток на оси x в тепловой карте (ых)
#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 с кластеризация и ориентации и приятные визуальные особенности взлома? Моя лучшая ставка меняет heatmap()
или pheatmap()
как-то, потому что эти два, кажется, самые универсальные в настройке. Но любые решения приветствуются.
Базовая графика не позволяет контролировать вращение меток ярлыков произвольными углами - поэтому вы должны использовать «текстовый» взлом », который вы показываете на последнем примере« образ ». Вероятно, я передал бы 'xaxt = FALSE' в мой вызов' heatmap', а затем добавлю ось без меток, а затем добавлю метки с помощью 'text', так же, как вы делаете с' image'. –
@GavinSimpson Проблема с этим подходом заключается в том, что вам необходимо вручную определить порядок меток по оси x при кластеризации. Возможно, но немного больно. Тем не менее, спасибо, указав на то, что 'heatmap()' создается с использованием базовой графики, а не сетки (я думал, что это сетка как 'pheatmap()'). –
Существует решение этого - у меня есть что-то работающее, что я просто пишу в качестве ответа. Это было немного больше, чем я думал. Решение скоро ... –