топоплот в 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):

Ответы на вопрос(1)

Ваш ответ на вопрос