Görselleştirme için yüksek boyutlu verileri azaltmanın yolları


19

Bir 2D fiziksel simülasyon üzerinde çalışıyorum ve çeşitli noktalarda zamanında veri topluyorum. Bu ayrık noktalar, eksenel yönde birden fazla çizgi ile dikey çizgiler üzerindedir. Bu, veri kümesini etkili bir şekilde 4D yapar.

Örneğin, (X, Y) koordinatlarında toplama noktalarına sahip olduğumu varsayalım:

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

ve her bir noktada toplanması am p basıncı, T , sıcaklıktır , U , V X ve hız Y bileşenleridir. Simülasyonun her yinelemesinde, bu değişkenler 9 toplama noktasının tümü için saklanır. Yani tüm verilerim uzayda her bir ayrık noktada sürekli.{P,T,U,V}PTU,V

Örneğin, tek bir noktaya ilişkin veriler şöyle görünür:

Tek Nokta İçin Basınç ve Zaman U-Velocity - Tek bir puan için süre

Diyelim ki, dikey ve eksenel dalgaları göstermek için her zaman tüm noktalarda basınç gösterme ile ilgileniyorum. Bunu tek bir çizgi boyunca (dikey veya eksenel) yapsaydım, eksenli bir şelale grafiği kullanabilirdim (Y, zaman, Basınç). Ama 3 dikey çizgim ve 3 eksenel çizgim varsa, bu, her iki yönde dalga hareketinin tam bir resmini elde etmek için 6 şelale grafiği olacaktır. Alan (bu durumda Basınç) ve süre sürekli iken, uzamsal koordinatlar ayrık değişkenlerdir.

t0.000125

Hepsini birden göstermek için bir yöntem var mı? Genellikle "dördüncü" bir boyutu görünür kılmak için renk eklenebilir, ancak başka bir olası yaklaşım var mı? Bir şeyin başkalarının bilmediği bilgileri açığa vurup açmayacağını görmek için mümkün olduğunca çok plan yapmayı planlıyorum, bu yüzden lütfen herhangi bir fikir verin.

Simülasyon 3D olsaydı ve 5D sonuç veri setim olsaydı ne olurdu? Bu olası görüntüleme yöntemlerini değiştiriyor mu?


Tüm boyutlar ayrık mı yoksa bazıları sürekli mi? Varsa hangileri hangisidir?
naught101

(X, Y) ayrıkken (P, zaman) süreklidir.
tpg2114

Ben faceting 3-b alternatif (veya tamamlayıcı) olarak düşünün öneririz
Michael Bishop

Yazdırılabilecek statik bir çizim olması gerekiyor mu? Değilse, verilerinizi zaman aralıklı bir dizi grafik olarak gösterebilirsiniz. Doğru hatırlıyorsam, JMP yazılımı böyle bir şey yapar.
Emil Friedman

1
@ naught101 Güncel olarak güncellendi.
tpg2114 9:12

Yanıtlar:


14

Kendimde yedi boyutlu verilerim vardı. Sonunda küçük bir 3 boyutlu dilim geçişi seçimine rağmen, bir seçenek Paralel Koordinatlar Grafiğidir . Bu, keyfi sayıda boyut için çalışır! Wikipedia'dan:

Paralel koordinatlar, yüksek boyutlu geometriyi görselleştirmenin ve çok değişkenli verileri analiz etmenin yaygın bir yoludur.

N boyutlu bir alanda bir dizi noktayı göstermek için, n dikey çizgiden oluşan, tipik olarak dikey ve eşit aralıklı bir zemin çizilir. N-boyutlu uzayda bir nokta, paralel eksenlerde köşeleri olan bir çoklu çizgi olarak temsil edilir; tepe noktasının ith ekseni üzerindeki konumu, noktanın ith koordinatına karşılık gelir.

resim açıklamasını buraya girin


Harika bir komplo. Mükemmel renk kullanımı. Efsane yan tarafta daha iyi olurdu ve son eksendeki renklerle eşleşmesi için yeniden sipariş edildi, ancak hayati değil.
naught101

3
@ naught101 Wikipedia'dan, orada gelişmiş bir tane göndermek için çekinmeyin ;-)
gerrit

Bu harika bir teknik !!
Sohaib I

4

Çift grafikleri : Bu, boyutsallık azaltma yöntemi değildir , ancak bazı anlamlı ilişkilerin nerede olabileceğine hızlı bir genel bakış elde etmek için gerçekten iyi bir yoldur. R'de, temel paket pairs()sürekli veriler için iyi olan işlevi içerir (her şeyi sürekli hale getirir). Daha iyi bir fonksiyonudur ggpairs()gelen, GGallypaketin:

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

İris çiftleri çizimi


3

Temel Bileşen Analizi genellikle çoğu durumda boyut küçültme için iyi bir seçimdir, özel probleminize uygun olacağından emin değilim, ancak veri örneklerinin en çok varyasyonunun yakalandığı dikey boyutları bulacaktır. R'de gelişirseniz prcomp(), orijinal veri noktaları matrisinizi PCA formuna dönüştürmek için kullanabilirsiniz .


2

3-B verileri ggplot2 ile tasvir etmenin birkaç yolu. Grafiğinizin boyutluluğunu artırmak için yaklaşımları (faset ızgaraları, renkler, şekiller vb.) Birleştirebilirsiniz.

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)

resim açıklamasını buraya girin


Bu aynı plan, 12 kez tekrarlandı, ancak farklı çizgiler vurgulanmış, değil mi? Bu verilere bakmanın kesinlikle ilginç bir yolu! Başka bir yol, sadece orijinal aylık zaman çizelgelerini çizmek ve daha sonra aya göre faset oluşturmak ve ay puanlarını üstüne çizmek olacaktır. Aynı fikir, ama orada "gerçek" zaman çizelgeleri ile.
naught101

Bunun gibi: 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(). Kahretsin, ggplot2'yi seviyorum.
naught101

1

p=pmebirnresim açıklamasını buraya girin

Bu grafik, farklı eksenel konumlardaki hız profillerini gösterir ve akış alanının 2B haritasını verir. Dikey çizgiler 0 hızı temsil eder. Nokta olmayan bölgeler hesaplama alanının bir parçası değildir. Tabii ki bu 3D verilere kolayca genişletilemez ...


Beyaz kare ne için?
naught101

Bu bir akış alanı temsilidir. Bir köşe etrafında bir akış, profiller farklı eksenel konumlardaki hızı temsil ediyor ...
FrenchKheldar

Tamam. Cevaba biraz açıklama eklemek mantıklı olacaktır. Arsa kendisi tarafından oldukça opak ...
naught101
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.