Façons de réduire les données de haute dimension pour la visualisation

19

Je travaille sur une simulation physique 2D et je collecte des données dans le temps en plusieurs points. Ces points discrets sont le long de lignes verticales, avec plusieurs lignes dans la direction axiale. Cela rend l'ensemble de données 4D efficace.

Par exemple, supposons que j'ai des points de collecte aux coordonnées (X, Y) de:

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

et à chaque point, je collecte où est la pression, est la température, sont les composantes X et Y de la vitesse. À chaque itération de la simulation, ces variables sont stockées pour les 9 points de collecte. Donc, toutes mes données sont continues dans le temps à chaque point discret de l'espace.{P,T,U,V}PTU,V

Par exemple, les données d'un seul point ressembleraient à:

Pression vs temps pour un seul point U-Velocity vs Time pour un seul point

Je suis intéressé à montrer, disons, la pression en tout point pour tous les temps pour montrer les ondes verticales et axiales. Si je devais le faire le long d'une seule ligne (verticale ou axiale), je pourrais utiliser un tracé en cascade avec des axes (Y, temps, pression). Mais si j'ai 3 lignes verticales et 3 lignes axiales, ce serait 6 parcelles en cascade pour obtenir une image complète du mouvement des vagues dans les deux directions. Les coordonnées spatiales sont des variables discrètes tandis que le champ (dans ce cas la pression) et le temps sont continus.

Dans les figures ci-dessus par exemple, le grand pic de pression à pourrait se déplacer dans la direction X ou Y.t0,000125

Existe-t-il une méthode pour les montrer tous en même temps? Habituellement, la couleur peut être ajoutée pour rendre visible une "quatrième" dimension, mais existe-t-il une autre approche possible? Je prévois de le tracer autant de façons que possible pour voir si quelque chose révèle des informations que d'autres ne divulguent pas, veuillez donc présenter vos idées.

Et si la simulation était en 3D et que j'avais un jeu de données résultant 5D? Cela change-t-il les méthodes de visualisation possibles?

tpg2114
la source
Toutes les dimensions sont-elles discrètes ou certaines sont-elles continues? Si oui, lesquels sont lesquels?
naught101
Les (X, Y) sont discrets tandis que (P, temps) sont continus.
tpg2114
Je recommande d'envisager le facettage comme alternative (ou complément) à la 3D
Michael Bishop
Doit-il s'agir d'un tracé statique pouvant être imprimé? Si ce n'est pas le cas, vous pouvez afficher vos données sous la forme d'une série chronologique de graphiques. Si je me souviens bien, le logiciel JMP fait ce genre de chose.
Emil Friedman
1
@ naught101 Mis à jour en conséquence.
tpg2114

Réponses:

14

J'avais moi-même des données en sept dimensions. Bien que j'aie finalement opté pour une petite sélection de coupes tridimensionnelles, une option est le tracé des coordonnées parallèles . Cela fonctionne pour un nombre arbitraire de dimensions! De Wikipédia:

Les coordonnées parallèles sont un moyen courant de visualiser la géométrie à haute dimension et d'analyser les données multivariées.

Pour montrer un ensemble de points dans un espace à n dimensions, une toile de fond est dessinée composée de n lignes parallèles, généralement verticales et également espacées. Un point dans l'espace à n dimensions est représenté par une polyligne avec des sommets sur les axes parallèles; la position du sommet sur le ième axe correspond à la ième coordonnée du point.

entrez la description de l'image ici

gerrit
la source
Voilà un grand complot. Excellente utilisation de la couleur. La légende serait meilleure sur le côté et réordonnée pour correspondre aux couleurs du dernier axe, mais ce n'est pas vital.
naught101
3
@ naught101 C'est de Wikipédia, n'hésitez pas à en envoyer un amélioré ici ;-)
gerrit
C'est une excellente technique !!
Sohaib I
4

Diagrammes en paires : Ce n'est pas une méthode de réduction de la dimensionnalité, mais c'est un très bon moyen d'avoir un aperçu rapide de l'endroit où se trouvent certaines relations significatives. Dans R, le package de base contient la pairs()fonction, ce qui est bon pour les données continues (il convertit tout en continu). Une meilleure fonction est ggpairs(), à partir du GGallypackage:

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

Iris paires plot

rien101
la source
3

L'analyse des composants principaux est généralement un bon choix pour la réduction de dimension dans la plupart des cas, je ne suis pas sûr qu'elle conviendra à votre problème particulier, mais elle trouvera les dimensions orthogonales le long desquelles la plupart des variations d'échantillons de données sont capturées. Si vous développez en R, vous pouvez prcomp()simplement convertir votre matrice de points de données d'origine au format PCA.

Ali Sharifi
la source
2

Voici quelques façons de représenter les données 3D avec ggplot2. Vous pouvez combiner des approches (grilles de facettes, couleurs, formes, etc.) pour augmenter la dimensionnalité de votre graphique.

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)

entrez la description de l'image ici

rapidadverbssuck
la source
C'est la même intrigue, répétée 12 fois, mais avec des lignes différentes mises en évidence, non? Certainement une façon intéressante de regarder ces données! Une autre façon serait de tracer uniquement la série horaire mensuelle d'origine, puis la facette par mois, et de tracer les points du mois par-dessus. Même idée, mais avec la "vraie" série temporelle.
naught101
Comme ceci: 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(). Bon sang, j'adore ggplot2.
naught101
1

p=pmeunenentrez la description de l'image ici

Ce tracé montre les profils de vitesse à différents emplacements axiaux, vous donnant une carte 2D du champ d'écoulement. Les lignes verticales représentent 0 vitesse. Les régions sans points ne font pas partie du domaine de calcul. Bien sûr, ce n'est pas facilement extensible aux données 3D ...

FrenchKheldar
la source
À quoi sert le carré blanc?
naught101
Il s'agit d'une représentation de champ d'écoulement. C'est un écoulement autour d'un coin, les profils représentent la vitesse à différents emplacements axiaux ...
FrenchKheldar
D'accord. Il serait logique d'ajouter une description à la réponse. L'intrigue est assez opaque en elle-même ...
naught101