Способи зменшення даних високих розмірів для візуалізації


19

Я працюю над 2D фізичним моделюванням і збираю дані в часі в декілька моментів. Ці дискретні точки розташовані уздовж вертикальних ліній, з кількома лініями в осьовому напрямку. Це робить набір даних ефективно 4D.

Наприклад, припустимо, що у мене є точки збору за (X, Y) координатами:

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

і в кожній точці я збираю де P - тиск, T - температура, U , V - X- і Y-компоненти швидкості. При кожній ітерації моделювання ці змінні зберігаються для всіх 9 точок збору. Отже, всі мої дані є безперервними у часі у кожній дискретної точки простору.{П,Т,U,V}ПТU,V

Наприклад, дані для однієї точки виглядатимуть так:

Тиск проти часу за одну точку U-швидкість проти часу за одну точку

Мені цікаво показати, скажімо, тиск у всіх точках за всі часи, щоб показати вертикальні та осьові хвилі. Якби я це робив по одній лінії (вертикальній чи осьовій), я міг би використовувати водоспадну ділянку з осями (Y, час, Тиск). Але якщо у мене є 3 вертикальні та 3 осьові лінії, це було б 6 ділянок водоспаду, щоб отримати повну картину руху хвилі в обох напрямках. Просторові координати - це дискретні змінні, тоді як поле (в даному випадку Тиск) і час є безперервними.

т0,000125

Чи є метод, щоб показати їх усі відразу? Зазвичай колір можна додати, щоб зробити видимий "четвертий" вимір, але чи можливий інший підхід? Я планую скласти це якомога більше способів, щоб дізнатися, чи щось виявляє інформацію, якої інші не мають, тому, будь ласка, викладіть будь-які ідеї.

Що робити, якщо моделювання було тривимірним, і я мав 5D отриманий набір даних? Чи це змінює можливі методи візуалізації?


Чи всі розміри дискретні, або деякі суцільні? Якщо так, то які з них?
naught101

(X, Y) дискретні, тоді як (P, час) безперервні.
tpg2114

Я рекомендую розглянути облицювання як альтернативу (або доповнення) до 3-ї
Михайла Єпископа

Чи потрібно це статичний сюжет, який можна надрукувати? Якщо ні, ви могли б показати свої дані у вигляді простроченої за часом серії сюжетів. Якщо я добре пам'ятаю, програмне забезпечення JMP робить таке.
Еміль Фрідман

1
@ naught101 Оновлено по суті.
tpg2114

Відповіді:


14

У мене були якісь семивимірні дані. Хоча я нарешті зупинився на невеликому виборі 3-х мірних прорізів, один із варіантів - графік паралельних координат . Це працює для довільної кількості вимірів! З Вікіпедії:

Паралельні координати є загальним способом візуалізації великої розмірної геометрії та аналізу багатовимірних даних.

Щоб показати набір точок у n-мірному просторі, малюється фон, що складається з n паралельних ліній, як правило, вертикальних і однаково розташованих. Точка в n-мірному просторі представлена ​​у вигляді полілінії з вершинами на паралельних осях; положення вершини на i-й осі відповідає i-й координаті точки.

введіть тут опис зображення


Це чудовий сюжет. Відмінне використання кольору. Легенда була б краще збоку, і вона переказала відповідати кольорам на останній осі, але це не життєво важливо.
naught101

3
@ naught101 Це з Вікіпедії, сміливо надсилайте там поліпшений ;-)
gerrit

Це чудова техніка !!
Sohaib I

4

Парні сюжети : Це не метод зменшення розмірності, але це дійсно хороший спосіб отримати швидкий огляд того, де можуть лежати якісь значущі стосунки. У R базовий пакет містить pairs()функцію, яка хороша для безперервних даних (перетворює все на безперервне). Краща функція - ggpairs()з GGallyпакета:

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

Сюжет пар Ірис


3

Аналіз основних компонентів, як правило, є хорошим вибором для зменшення розмірів у більшості випадків, я не впевнений, що він підійде для вашої конкретної проблеми, але він знайде ортогональні розміри, уздовж яких фіксується більшість варіацій зразків даних. Якщо ви розробляєте R, ви можете prcomp()просто перетворити оригінальну матрицю точок даних у форму PCA.


2

Ось пара способів відображення тривимірних даних за допомогою ggplot2. Ви можете комбінувати підходи (гранітні сітки, кольори, форми тощо), щоб збільшити розмірність вашої графіки.

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)

введіть тут опис зображення


Це той самий сюжет, повторений 12 разів, але з різними рядками, виділеними, правда? Безумовно цікавий спосіб перегляду цих даних! Іншим способом було б побудувати лише початкові щомісячні часові видання, а потім грань за місяцем та накреслити точки місяця над ним. Та сама ідея, але з "справжніми" таймерами там.
naught101

Як це: 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(). Боже чорт, я люблю ggplot2.
naught101

1

p=pмеанвведіть тут опис зображення

Цей графік показує профілі швидкості в різних осьових місцях, даючи 2D карту поля потоку. Вертикальні лінії представляють 0 швидкість. Регіони без крапок не є частиною обчислювальної області. Звичайно, це не легко розширюється до даних 3D ...


Для чого білий квадрат?
naught101

Це подання поля потоку. Це потік за кутом, профілі представляють швидкість у різних осьових місцях ...
FrenchKheldar

Добре. Було б сенс додати у відповідь якийсь опис. Сюжет досить непрозорий сам по собі ...
naught101
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.