топоплот в ggplot2 - 2D визуализация, например Данные ЭЭГ
Можноggplot2
использоваться для производства так называемогоtopoplot (часто используется в неврологии)?
Пример данных:
label x y signal
1 R3 0.64924459 0.91228430 2.0261520
2 R4 0.78789621 0.78234410 1.7880972
3 R5 0.93169511 0.72980685 0.9170998
4 R6 0.48406513 0.82383895 3.1933129
Ряды представляют отдельные электроды. Колонныx
а такжеy
представлять проекцию в 2D-пространство и столбецsignal
по существу, ось z представляет напряжение, измеренное на данном электроде.
stat_contour
не работает, видимо из-за неравной сетки.
geom_density_2d
только обеспечивает оценку плотностиx
а такжеy
.
geom_raster
это не подходит для этой задачи, или я должен использовать его неправильно, так как он быстро исчерпывает память.
Сглаживание (как на рисунке справа) и контуры головы (нос, уши) не нужны.
Я хочу избежать Matlab и преобразования данных так, чтобы они соответствовали тому или иному набору инструментов ... Большое спасибо!
Обновление (26 января 2016 г.)Самое близкое, что я смог достичь своей цели - это через
library(colorRamps)
ggplot(channels, aes(x, y, z = signal)) + stat_summary_2d() + scale_fill_gradientn(colours=matlab.like(20))
который производит изображение как это:
Обновление 2 (27 января 2016 г.)Я попробовал подход @ alexforrence с полными данными, и вот результат:
Это отличное начало, но есть пара вопросов:
Последний звонок (ggplot()
) занимает около 40 секунд на Intel i7 4790K, в то время как наборы инструментов Matlab удается генерировать их почти мгновенно; мое «решение для экстренных случаев» выше занимает около секунды.Как вы можете видеть, верхняя и нижняя граница центральной части выглядит «нарезанной» - я не уверен, что является причиной этого, но это может быть третьей проблемой.Я получаю эти предупреждения:
1: Removed 170235 rows containing non-finite values (stat_contour).
2: Removed 170235 rows containing non-finite values (stat_contour).
Обновление 3 (27 января 2016 г.)Сравнение двух участков, полученных с разнымиinterp(xo, yo)
а такжеstat_contour(binwidth)
ценности:
Рваные края, если кто-то выбирает низкийinterp(xo, yo)
, в этом случаеxo
/yo = seq(0, 1, length = 100)
: