Möglichkeiten zur Reduzierung von hochdimensionalen Daten für die Visualisierung

19

Ich arbeite an einer physikalischen 2D-Simulation und sammle zeitlich an mehreren Stellen Daten. Diese diskreten Punkte liegen entlang vertikaler Linien mit mehreren Linien in axialer Richtung. Dies macht den Datensatz effektiv zu 4D.

Nehmen wir zum Beispiel an, ich habe Sammelpunkte an (X, Y) -Koordinaten von:

  • (0,0), (1,0), (2,0)
  • (0,1), (1,1), (2,1)
  • (0,2), (1,2), (2,2)

und an jedem Punkt sammle ich wobei Druck ist, Temperatur ist, die X- und Y-Komponenten der Geschwindigkeit sind. Bei jeder Iteration der Simulation werden diese Variablen für alle 9 Sammelstellen gespeichert. So sind alle meine Daten an jedem einzelnen Punkt im Raum zeitlich kontinuierlich.{P,T,U,V}PTU,V

Die Daten für einen einzelnen Punkt sehen beispielsweise folgendermaßen aus:

Druck gegen Zeit für einen einzelnen Punkt U-Geschwindigkeit vs Zeit für einen einzelnen Punkt

Ich möchte zum Beispiel jederzeit Druck zeigen, um vertikale und axiale Wellen zu zeigen. Wenn ich dies entlang einer einzelnen Linie (entweder vertikal oder axial) machen würde, könnte ich ein Wasserfalldiagramm mit Achsen (Y, Zeit, Druck) verwenden. Wenn ich jedoch 3 vertikale Linien und 3 axiale Linien habe, wären dies 6 Wasserfalldiagramme, um ein vollständiges Bild der Wellenbewegung in beide Richtungen zu erhalten. Die Raumkoordinaten sind diskrete Variablen, während das Feld (in diesem Fall Druck) und die Zeit kontinuierlich sind.

In den obigen Figuren könnte sich beispielsweise die große Druckspitze bei in der X- oder Y-Richtung .t0,000125

Gibt es eine Methode, um alle auf einmal anzuzeigen? Normalerweise kann Farbe hinzugefügt werden, um eine "vierte" Dimension sichtbar zu machen. Gibt es jedoch einen anderen Ansatz? Ich plane, so viele Wege wie möglich zu planen, um zu sehen, ob etwas Informationen enthüllt, die andere nicht enthüllen.

Was wäre, wenn die Simulation 3D wäre und ich einen 5D-Datensatz hätte? Verändert das die möglichen Visualisierungsmethoden?

tpg2114
quelle
Sind alle Dimensionen diskret oder sind einige kontinuierlich? Wenn ja, welche sind welche?
Naught101
Die (X, Y) sind diskret, während (P, Zeit) kontinuierlich sind.
tpg2114
Ich empfehle Facettierung als Alternative (oder Ergänzung) zu 3D
Michael Bishop
Muss es ein statischer Plot sein, der gedruckt werden kann? Wenn nicht, können Sie Ihre Daten als zeitversetzte Folge von Plots anzeigen. Wenn ich mich richtig erinnere, macht die JMP-Software so etwas.
Emil Friedman
1
@ naught101 Akustisch aktualisiert.
tpg2114

Antworten:

14

Ich selbst hatte sieben dimensionale Daten. Obwohl ich mich schließlich für eine kleine Auswahl dreidimensionaler Slice-throughs entschieden habe, ist eine Option die Darstellung paralleler Koordinaten . Dies funktioniert für eine beliebige Anzahl von Dimensionen! Aus Wikipedia:

Parallele Koordinaten sind eine gängige Methode zur Visualisierung hochdimensionaler Geometrie und zur Analyse multivariater Daten.

Um eine Menge von Punkten in einem n-dimensionalen Raum darzustellen, wird ein Hintergrund gezeichnet, der aus n parallelen Linien besteht, die typischerweise vertikal und gleichmäßig beabstandet sind. Ein Punkt im n-dimensionalen Raum wird als Polylinie mit Eckpunkten auf den parallelen Achsen dargestellt. Die Position des Scheitelpunkts auf der i-ten Achse entspricht der i-ten Koordinate des Punkts.

Bildbeschreibung hier eingeben

Gerrit
quelle
Das ist eine großartige Geschichte. Hervorragende Verwendung von Farbe. Die Legende wäre auf der Seite besser und würde neu angeordnet, damit sie mit den Farben auf der letzten Achse übereinstimmt, aber es ist nicht entscheidend.
Naught101
3
@ naught101 Es ist aus Wikipedia, zögern Sie nicht, eine verbesserte dort zu senden
;-)
Das ist eine großartige Technik !!
Sohaib I
4

Darstellungen von Paaren : Dies ist keine Methode zur Reduzierung der Dimensionalität, aber eine gute Methode, um schnell einen Überblick darüber zu erhalten, wo einige sinnvolle Beziehungen liegen könnten. In R enthält das Basispaket die pairs()Funktion, die für kontinuierliche Daten geeignet ist (es konvertiert alles in kontinuierliche Daten). Eine bessere Funktion ist ggpairs()aus dem GGallyPaket:

library(GGally)
ggpairs(iris, colour='Species')

Iris-Paar-Handlung

naught101
quelle
3

Die Hauptkomponentenanalyse ist in den meisten Fällen eine gute Wahl für die Dimensionsreduktion. Ich bin nicht sicher, ob sie für Ihr spezielles Problem geeignet ist, aber sie ermittelt die orthogonalen Dimensionen, entlang derer die meisten Variationen von Datenproben erfasst werden. Wenn Sie in R entwickeln, können Sie prcomp()einfach Ihre ursprüngliche Datenpunktmatrix in das PCA-Formular konvertieren.

Ali Sharifi
quelle
2

Hier sind einige Möglichkeiten, 3D-Daten mit ggplot2 darzustellen. Sie können Ansätze (Facettenraster, Farben, Formen usw.) kombinieren, um die Dimensionalität Ihrer Grafik zu erhöhen.

doInstall <- TRUE  # Change to FALSE if you don't want packages installed.
toInstall <- c("ggplot2")
if(doInstall){install.packages(toInstall, repos = "http://cran.r-project.org")}
lapply(toInstall, library, character.only = TRUE)

# Air passenger data. ts converted to long matrix:
myData <- data.frame(Year = c(floor(time(AirPassengers) + .01)),
                     Month = c(cycle(AirPassengers)), 
                     Value = c(AirPassengers))
# Easy conversion code from: http://stackoverflow.com/a/4973859/479554

# Convert month numbers to names, using a built-in constant:
myData$Month <- factor(myData$Month)
levels(myData$Month) <- month.abb

# One possibility:
zp1 <- ggplot(myData,
              aes(x = Year, y = Value, colour = Month))
zp1 <- zp1 + geom_line()
print(zp1)  # This is fine, if you can differentiate between the colors

# Another possibility:
zp2 <- ggplot(myData,
              aes(x = Year, y = Value))
zp2 <- zp2 + geom_line()
zp2 <- zp2 + facet_wrap(~ Month)
print(zp2)  # This is fine, but it's hard to compare across facets

# A third possibility; plotting reference lines across each facet:
referenceLines <- myData  # \/ Rename
colnames(referenceLines)[2] <- "groupVar"
zp3 <- ggplot(myData,
              aes(x = Year, y = Value))
zp3 <- zp3 + geom_line(data = referenceLines,  # Plotting the "underlayer"
                       aes(x = Year, y = Value, group = groupVar),
                       colour = "GRAY", alpha = 1/2, size = 1/2)
zp3 <- zp3 + geom_line(size = 1)  # Drawing the "overlayer"
zp3 <- zp3 + facet_wrap(~ Month)
zp3 <- zp3 + theme_bw()
print(zp3)

Bildbeschreibung hier eingeben

rapidadverbssuck
quelle
Das ist die gleiche Handlung, die 12 Mal wiederholt wurde, aber mit verschiedenen hervorgehobenen Linien, richtig? Auf jeden Fall eine interessante Art, diese Daten zu betrachten! Eine andere Möglichkeit wäre, nur die ursprünglichen monatlichen Zeitreihen und dann die Facetten pro Monat zu zeichnen und die Monatspunkte darüber zu zeichnen. Gleiche Idee, aber mit der "richtigen" Zeitreihe.
naught101
Wie folgt aus : APdf <- data.frame(Time=c(time(AirPassengers)), Year=c(floor(time(AirPassengers))), Month=c(cycle(AirPassengers)), Value=c(AirPassengers)) ; APdf$Month <- month.abb[APdf$Month] ; ggplot(APdf, aes(x=Time, y=Value)) + facet_wrap(facets='Month') + geom_line(data=APdf[,c(1,4)], colour='gray') + geom_point(). Verdammt, ich liebe ggplot2.
naught101
1

p=pmeeinnBildbeschreibung hier eingeben

Dieses Diagramm zeigt die Geschwindigkeitsprofile an verschiedenen axialen Positionen, sodass Sie eine 2D-Karte des Flussfelds erhalten. Die vertikalen Linien stehen für die Geschwindigkeit 0. Die Bereiche ohne Punkte sind nicht Teil des Rechenbereichs. Natürlich ist dies nicht einfach auf 3D-Daten erweiterbar ...

FrenchKheldar
quelle
Wofür ist das weiße Quadrat?
naught101
Dies ist eine Flussfelddarstellung. Es ist ein Fluss um eine Ecke, die Profile repräsentieren die Geschwindigkeit an verschiedenen axialen Orten ...
FrenchKheldar
Okay. Es wäre sinnvoll, der Antwort eine Beschreibung hinzuzufügen. Die Handlung ist für sich genommen ziemlich undurchsichtig ...
naught101