Modi per ridurre i dati ad alta dimensione per la visualizzazione


19

Sto lavorando a una simulazione fisica 2D e sto raccogliendo dati in tempo in diversi punti. Questi punti discreti si trovano lungo linee verticali, con più linee in direzione assiale. Ciò rende il set di dati efficacemente 4D.

Ad esempio, supponiamo che io abbia punti di raccolta nelle coordinate (X, Y) di:

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

e ad ogni punto sto raccogliendo dove è pressione, è temperatura, sono i componenti X e Y della velocità. Ad ogni iterazione della simulazione, queste variabili vengono archiviate per tutti e 9 i punti di raccolta. Quindi tutti i miei dati sono continui nel tempo in ogni punto discreto nello spazio.P T U , V{P,T,U,V}PTU,V

Ad esempio, i dati per un singolo punto dovrebbero apparire come:

Pressione vs tempo per un singolo punto U-Velocity vs Time per un singolo punto

Sono interessato a mostrare, per esempio, la pressione in tutti i punti per tutte le volte per mostrare le onde verticali e assiali. Se dovessi farlo su una sola linea (verticale o assiale), potrei usare un diagramma a cascata con assi (Y, tempo, pressione). Ma se ho 3 linee verticali e 3 linee assiali, questo sarebbe 6 grafici a cascata per ottenere un quadro completo del movimento dell'onda in entrambe le direzioni. Le coordinate spaziali sono variabili discrete mentre il campo (in questo caso Pressione) e il tempo sono continui.

Nelle figure precedenti, ad esempio, l'ampio picco di pressione a potrebbe nella direzione X o Y.t0.000125

Esiste un metodo per mostrarli tutti in una volta? Di solito il colore può essere aggiunto per rendere visibile una "quarta" dimensione, ma esiste un altro approccio possibile? Ho in programma di tracciarlo il maggior numero possibile di modi per vedere se qualcosa rivela informazioni che altri non fanno, quindi per favore lancia qualche idea.

E se la simulazione fosse 3D e avessi un set di dati risultante in 5D? Ciò modifica i possibili metodi di visualizzazione?


Tutte le dimensioni sono discrete o alcune sono continue? In tal caso, quali sono quali?
naught101

(X, Y) sono discreti mentre (P, tempo) sono continui.
tpg2114,

Consiglio di considerare la sfaccettatura come alternativa (o complemento) al 3-d
Michael Bishop,

Deve essere un grafico statico che può essere stampato? In caso contrario, potresti mostrare i tuoi dati come una serie di grafici scaduti. Se ricordo bene, il software JMP fa questo genere di cose.
Emil Friedman,

1
@ naught101 Aggiornato di conseguenza.
tpg2114,

Risposte:


14

Ho avuto anche alcuni dati a sette dimensioni. Anche se alla fine ho optato per una piccola selezione di sezioni tridimensionali tridimensionali, un'opzione è il diagramma delle coordinate parallele . Questo funziona per un numero arbitrario di dimensioni! Da Wikipedia:

Le coordinate parallele sono un modo comune per visualizzare la geometria ad alta dimensione e analizzare i dati multivariati.

Per mostrare una serie di punti in uno spazio n-dimensionale, viene disegnato uno sfondo costituito da n linee parallele, tipicamente verticali e equidistanti. Un punto nello spazio n-dimensionale è rappresentato come una polilinea con vertici sugli assi paralleli; la posizione del vertice sull'ottavo asse corrisponde all'ottava coordinata del punto.

inserisci qui la descrizione dell'immagine


È una trama fantastica. Ottimo uso del colore. La legenda sarebbe meglio sul lato e riordinata per abbinare i colori sull'ultimo asse, ma non è vitale.
naught101

3
@ naught101 È di Wikipedia, sentiti libero di inviarne uno migliore lì ;-)
gerrit,

Questa è un'ottima tecnica !!
Sohaib I,

4

Grafici di coppie : questo non è un metodo di riduzione della dimensionalità, ma è davvero un buon modo per avere una rapida panoramica di dove potrebbero trovarsi alcune relazioni significative. In R, il pacchetto base contiene la pairs()funzione, che è buona per i dati continui (converte tutto in continuo). Una funzione migliore è ggpairs(), dal GGallypacchetto:

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

Trama di coppie di iris


3

L'analisi dei componenti principali è generalmente una buona scelta per la riduzione delle dimensioni nella maggior parte dei casi, non sono sicuro che si adatta al tuo problema particolare, ma troverà le dimensioni ortogonali lungo le quali viene acquisita la maggior parte dei campioni di dati. Se si sviluppa in R, è possibile utilizzare prcomp()semplicemente per convertire la matrice originale di punti dati nel modulo PCA.


2

Ecco un paio di modi per rappresentare i dati 3D con ggplot2. È possibile combinare approcci (griglie delle sfaccettature, colori, forme, ecc.) Per aumentare la dimensionalità della grafica.

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)

inserisci qui la descrizione dell'immagine


È la stessa trama, ripetuta 12 volte, ma con linee diverse evidenziate, giusto? Sicuramente un modo interessante di guardare quei dati! Un altro modo sarebbe quello di tracciare solo la serie temporale mensile originale, quindi sfaccettatura per mese e tracciare i punti del mese su di essa. Stessa idea, ma con la "vera" multiproprietà lì dentro.
nulla101

Come questo: 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(). Dio dannazione, adoro ggplot2.
nulla101

1

p=pmeun'ninserisci qui la descrizione dell'immagine

Questo diagramma mostra i profili di velocità in diverse posizioni assiali, offrendo una mappa 2D del campo di flusso. Le linee verticali rappresentano la velocità 0. Le regioni senza punti non fanno parte del dominio computazionale. Naturalmente questo non è facilmente estendibile ai dati 3D ...


A cosa serve il quadrato bianco?
nulla101

Questa è una rappresentazione del campo di flusso. È un flusso dietro un angolo, i profili rappresentano la velocità in diverse posizioni assiali ...
FrenchKheldar

Ok. Avrebbe senso aggiungere una descrizione alla risposta. La trama è piuttosto opaca da sola ...
niente
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.