Cara mengurangi data dimensi tinggi untuk visualisasi


19

Saya sedang mengerjakan simulasi fisik 2D dan saya mengumpulkan data tepat waktu di beberapa titik. Titik-titik diskrit ini berada di sepanjang garis vertikal, dengan beberapa garis dalam arah aksial. Ini membuat dataset menjadi 4D secara efektif.

Misalnya, anggap saya memiliki titik pengumpulan di (X, Y) koordinat:

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

dan pada setiap titik saya mengumpulkan mana adalah tekanan, adalah suhu, adalah komponen kecepatan X- dan Y. Pada setiap iterasi simulasi, variabel-variabel ini disimpan untuk semua 9 titik pengumpulan. Jadi semua data saya kontinu dalam waktu di setiap titik diskrit di ruang angkasa.{P,T,U,V}PTU,V

Misalnya, data untuk satu titik akan terlihat seperti:

Tekanan vs Waktu untuk satu titik U-Velocity vs Waktu untuk satu titik

Saya tertarik untuk menunjukkan, katakanlah, Tekanan di semua titik setiap saat untuk menunjukkan gelombang vertikal dan aksial. Jika saya melakukan ini di sepanjang garis tunggal (baik vertikal atau aksial), saya bisa menggunakan plot air terjun dengan sumbu (Y, waktu, Tekanan). Tetapi jika saya memiliki 3 garis vertikal dan 3 garis aksial, ini akan menjadi 6 plot air terjun untuk mendapatkan gambaran lengkap tentang gerakan gelombang di kedua arah. Koordinat spasial adalah variabel diskrit sementara lapangan (dalam hal ini Tekanan) dan waktu kontinu.

Pada gambar di atas misalnya, puncak tekanan besar di bisa bepergian ke arah X atau Y.t0,000125

Apakah ada metode untuk menunjukkan semuanya sekaligus? Biasanya warna dapat ditambahkan untuk membuat dimensi "keempat" terlihat, tetapi apakah ada pendekatan lain yang mungkin? Saya berencana merencanakan sebanyak mungkin cara untuk melihat apakah ada sesuatu yang mengungkapkan informasi yang tidak diketahui orang lain, jadi tolong sampaikan ide apa pun.

Bagaimana jika simulasi adalah 3D dan saya memiliki dataset 5D? Apakah itu mengubah metode visualisasi yang mungkin?


Apakah semua dimensi terpisah, atau sebagian kontinu? Jika demikian, yang mana yang mana?
nucky101

(X, Y) terpisah sementara (P, waktu) kontinu.
tpg2114

Saya sarankan mempertimbangkan faceting sebagai alternatif (atau pelengkap) untuk 3-d
Michael Bishop

Apakah perlu plot yang statis yang dapat dicetak? Jika tidak, Anda dapat menampilkan data sebagai serangkaian plot yang sudah tidak berjalan. Jika saya ingat dengan benar, perangkat lunak JMP melakukan hal semacam itu.
Emil Friedman

1
@ naught101 Diperbarui secara acoordingly.
tpg2114

Jawaban:


14

Saya memiliki beberapa data tujuh dimensi. Meskipun saya akhirnya memilih sedikit slice-through 3 dimensi, satu pilihan adalah Plot Koordinat Paralel . Ini berfungsi untuk sejumlah dimensi yang berubah-ubah! Dari Wikipedia:

Koordinat paralel adalah cara yang umum untuk memvisualisasikan geometri dimensi tinggi dan menganalisis data multivariat.

Untuk menunjukkan sekumpulan titik dalam ruang n-dimensi, sebuah latar belakang dibuat yang terdiri dari n garis paralel, biasanya vertikal dan berjarak sama. Suatu titik dalam ruang n-dimensi direpresentasikan sebagai polyline dengan simpul pada sumbu paralel; posisi verteks pada sumbu engan sesuai dengan koordinat engan titik.

masukkan deskripsi gambar di sini


Itu plot yang bagus. Penggunaan warna yang luar biasa. Legenda akan lebih baik di samping, dan dipesan ulang untuk mencocokkan warna pada sumbu terakhir, tetapi itu tidak penting.
nucky101

3
@ naught101 Ini dari Wikipedia, jangan ragu untuk mengirim yang lebih baik di sana ;-)
gerrit

Ini adalah teknik hebat !!
Sohaib I

4

Plot pasangan : Ini bukan metode pengurangan dimensionalitas, tetapi ini adalah cara yang sangat baik untuk mendapatkan gambaran singkat di mana beberapa hubungan yang bermakna mungkin berada. Dalam R, paket dasar berisi pairs()fungsi, yang baik untuk data kontinu (ini mengubah segalanya menjadi kontinu). Fungsi yang lebih baik adalah ggpairs(), dari GGallypaket:

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

Iris pasangan petak


3

Analisis Komponen Utama pada umumnya merupakan pilihan yang baik untuk pengurangan dimensi dalam banyak kasus, saya tidak yakin itu akan cocok untuk masalah khusus Anda, tetapi akan menemukan dimensi ortogonal di mana sebagian besar variasi sampel data ditangkap. Jika Anda mengembangkan di R, Anda bisa menggunakan prcomp()untuk hanya mengkonversi matriks asli dari titik data ke bentuk PCA.


2

Berikut adalah beberapa cara untuk menggambarkan data 3-D dengan ggplot2. Anda dapat menggabungkan pendekatan (facet grids, warna, bentuk, dll.) Untuk meningkatkan dimensi grafik Anda.

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)

masukkan deskripsi gambar di sini


Itu plot yang sama, diulang 12 kali, tetapi dengan garis yang berbeda disorot, kan? Jelas cara yang menarik untuk melihat data itu! Cara lain adalah dengan memplot hanya jangka waktu bulanan asli, dan kemudian facet berdasarkan bulan, dan plot poin bulan di atasnya. Gagasan yang sama, tetapi dengan pengaturan waktu "nyata" di sana.
naught101

Seperti ini: 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(). Sialan, aku suka ggplot2.
naught101

1

hal=halmeSebuahnmasukkan deskripsi gambar di sini

Plot ini menunjukkan profil kecepatan di lokasi aksial yang berbeda, memberikan Anda peta 2D dari bidang aliran. Garis-garis vertikal mewakili 0 kecepatan. Wilayah tanpa titik bukan bagian dari domain komputasi. Tentu saja ini tidak mudah diperluas ke data 3D ...


Untuk apa kotak putih itu?
naught101

Ini adalah representasi bidang aliran. Ini aliran di sudut, profil mewakili kecepatan di lokasi aksial yang berbeda ...
FrenchKheldar

Baik. Masuk akal untuk menambahkan deskripsi pada jawabannya. Plotnya cukup buram dengan sendirinya ...
naught101
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.