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
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 Anrufggplot()
) 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 seiIch 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)
: