topoplot in ggplot2 - 2D-Visualisierung von z. EEG-Daten

Könnenggplot2 verwendet werden, um ein sogenanntes @ zu erzeug topoplot (oft in den Neurowissenschaften verwendet)?

Beispieldaten

   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

Vollständige Beispieldaten.

Rows repräsentieren einzelne Elektroden. Säulenx undy repräsentiert die Projektion in den 2D-Raum und die Spaltesignal ist im Wesentlichen die z-Achse, die die an einer bestimmten Elektrode gemessene Spannung darstellt.

stat_contour funktioniert nicht, anscheinend aufgrund eines ungleichen Rasters.

geom_density_2d liefert nur eine Dichteschätzung vonx undy.

geom_raster ist nicht für diese Aufgabe geeignet, oder ich muss es falsch verwenden, da es schnell keinen Speicher mehr hat.

Smoothing (wie im Bild rechts) und Kopfkonturen (Nase, Ohren) sind nicht erforderlich.

Ich möchte Matlab vermeiden und die Daten so transformieren, dass sie in diese oder jene Toolbox passen ... Vielen Dank!

Update (26. Januar 2016)

Das nächste Ziel, das ich erreichen konnte, ist über

library(colorRamps)
ggplot(channels, aes(x, y, z = signal)) + stat_summary_2d() + scale_fill_gradientn(colours=matlab.like(20))

was ein Bild wie dieses erzeugt:

Aktualisierung 2 (27. Januar 2016)

Ich habe versucht @ alexforrence Ansatz mit vollständigen Daten und das ist das Ergebnis:

Es ist ein guter Anfang, aber es gibt ein paar Probleme:

Der letzte Anruf ggplot()) dauert auf einem Intel i7 4790K ungefähr 40 Sekunden, während Matlab-Toolboxes diese fast sofort generieren können. Meine oben genannte "Notfalllösung" dauert ungefähr eine Sekunde.ie Sie sehen, scheinen der obere und untere Rand des mittleren Teils in Scheiben geschnitten zu sein. Ich bin mir nicht sicher, was dies verursacht, aber es könnte das dritte Problem sei

Ich erhalte folgende Warnungen:

1: Removed 170235 rows containing non-finite values (stat_contour). 
2: Removed 170235 rows containing non-finite values (stat_contour). 
Update 3 (27. Januar 2016)

Vergleich zwischen zwei mit unterschiedlicheninterp(xo, yo) undstat_contour(binwidth) Werte:

Ragged Kanten, wenn man niedrig wähltinterp(xo, yo), in diesem Fallxo/yo = seq(0, 1, length = 100):

Antworten auf die Frage(2)

Ihre Antwort auf die Frage