Sposoby redukcji danych o dużych wymiarach do wizualizacji

19

Pracuję nad symulacją fizyczną 2D i zbieram dane na czas w kilku punktach. Te dyskretne punkty znajdują się wzdłuż linii pionowych, z wieloma liniami w kierunku osiowym. To sprawia, że ​​zestaw danych skutecznie 4D.

Załóżmy na przykład, że mam punkty zbiórki o współrzędnych (X, Y):

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

i w każdym punkcie zbieram gdzie to ciśnienie, to temperatura, to X- i Y-składowe prędkości. Przy każdej iteracji symulacji zmienne te są przechowywane dla wszystkich 9 punktów gromadzenia. Więc wszystkie moje dane są ciągłe w czasie w każdym dyskretnym punkcie w przestrzeni.P T U , V{P,T,U,V}PTU,V

Na przykład dane dla jednego punktu wyglądałyby następująco:

Ciśnienie w funkcji czasu dla pojedynczego punktu Prędkość U w funkcji czasu dla jednego punktu

Interesuje mnie pokazywanie, powiedzmy, ciśnienia we wszystkich punktach przez cały czas, aby pokazać fale pionowe i osiowe. Gdybym miał to zrobić wzdłuż jednej linii (pionowej lub osiowej), mógłbym użyć wykresu wodospadu z osiami (Y, czas, ciśnienie). Ale jeśli mam 3 linie pionowe i 3 linie osiowe, byłoby to 6 wykresów wodospadu, aby uzyskać pełny obraz ruchu fali w obu kierunkach. Współrzędne przestrzenne są zmiennymi dyskretnymi, podczas gdy pole (w tym przypadku Ciśnienie) i czas są ciągłe.

Na przykład na powyższych rysunkach duży pik ciśnienia przy może przemieszczać się w kierunku X lub Y.t0.000125

Czy istnieje metoda pokazania ich wszystkich naraz? Zwykle można dodać kolor, aby widoczny był „czwarty” wymiar, ale czy istnieje inne możliwe podejście? Planuję nakreślić to na jak najwięcej sposobów, aby zobaczyć, czy cokolwiek ujawnia informacje, których inni nie wiedzą, więc proszę, przedstawcie jakieś pomysły.

Co jeśli symulacja była 3D, a ja miałbym wynikowy zestaw danych 5D? Czy to zmienia możliwe metody wizualizacji?

tpg2114
źródło
Czy wszystkie wymiary są dyskretne, czy są ciągłe? Jeśli tak, to które?
naught101
(X, Y) są dyskretne, podczas gdy (P, czas) są ciągłe.
tpg2114,
Polecam rozważenie facetingu jako alternatywy (lub uzupełnienia) do 3-d
Michael Bishop,
Czy musi to być statyczny wykres, który można wydrukować? Jeśli nie, możesz pokazać swoje dane jako upływ czasu serii wykresów. Jeśli dobrze pamiętam, oprogramowanie JMP robi takie rzeczy.
Emil Friedman
1
@ naught101 Zaktualizowany zgodnie.
tpg2114

Odpowiedzi:

14

Sam miałem trochę danych siedmiowymiarowych. Chociaż ostatecznie zdecydowałem się na mały wybór trójwymiarowych przekrojów, jedną z opcji jest wykres równoległych współrzędnych . Działa to dla dowolnej liczby wymiarów! Z Wikipedii:

Współrzędne równoległe to powszechny sposób wizualizacji geometrii wielowymiarowej i analizy danych wielowymiarowych.

Aby pokazać zestaw punktów w przestrzeni n-wymiarowej, narysowane jest tło składające się z n równoległych linii, zwykle pionowych i równo rozmieszczonych. Punkt w przestrzeni n-wymiarowej jest reprezentowany jako polilinia z wierzchołkami na równoległych osiach; pozycja wierzchołka na i-tej osi odpowiada i-tej współrzędnej punktu.

wprowadź opis zdjęcia tutaj

gerrit
źródło
To świetna fabuła. Doskonałe wykorzystanie koloru. Legenda byłaby lepsza z boku i ponownie uporządkowana, aby dopasować kolory na ostatniej osi, ale to nie jest istotne.
naught101
3
@ naught101 Pochodzi z Wikipedii, wyślij tam poprawioną wersję ;-)
gerrit
To świetna technika !!
Sohaib I
4

Wykresy par : nie jest to metoda zmniejszania wymiarów, ale jest to naprawdę dobry sposób, aby uzyskać szybki przegląd miejsc, w których mogą znajdować się znaczące relacje. W R pakiet podstawowy zawiera pairs()funkcję, która jest dobra dla ciągłych danych (konwertuje wszystko na ciągłe). Lepszą funkcją jest ggpairs()z GGallypakietu:

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

Fabuła par irysów

naught101
źródło
3

Analiza głównych składników jest ogólnie dobrym wyborem do redukcji wymiarów w większości przypadków, nie jestem pewien, czy będzie pasować do konkretnego problemu, ale znajdzie wymiary ortogonalne, wzdłuż których przechwytywana jest większość wariantów próbek danych. Jeśli rozwijasz się w języku R, możesz użyć prcomp()do prostej konwersji oryginalnej macierzy punktów danych do postaci PCA.

Ali Sharifi
źródło
2

Oto kilka sposobów przedstawiania danych trójwymiarowych za pomocą ggplot2. Możesz łączyć podejścia (siatki aspektów, kolory, kształty itp.), Aby zwiększyć wymiarowość grafiki.

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)

wprowadź opis zdjęcia tutaj

rapidadverbssuck
źródło
To ten sam wątek, powtórzony 12 razy, ale z wyróżnionymi różnymi liniami, prawda? Zdecydowanie interesujący sposób patrzenia na te dane! Innym sposobem byłoby wykreślenie tylko oryginalnych miesięcznych przedziałów czasowych, a następnie rysowanie według miesięcy i wykreślenie punktów miesiąca na nim. Ten sam pomysł, ale z „prawdziwymi” seriami czasu.
naught101
Tak: 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(). Cholera, kocham ggplot2.
naught101
1

p=pmeanwprowadź opis zdjęcia tutaj

Ten wykres pokazuje profile prędkości w różnych lokalizacjach osiowych, dając mapę 2D pola przepływu. Linie pionowe reprezentują prędkość 0. Regiony bez kropek nie są częścią domeny obliczeniowej. Oczywiście nie jest to łatwe do rozszerzenia na dane 3D ...

FrenchKheldar
źródło
Do czego służy biały kwadrat?
naught101
Jest to reprezentacja pola przepływu. Jest to przepływ za rogiem, profile reprezentują prędkość w różnych położeniach osiowych ...
FrenchKheldar
Dobrze. Sensowne byłoby dodanie opisu do odpowiedzi. Fabuła sama w sobie jest dość nieprzejrzysta ...
naught101