Способы уменьшения объемных данных для визуализации


19

Я работаю над двумерным физическим моделированием и собираю данные во времени в нескольких точках. Эти дискретные точки расположены вдоль вертикальных линий с несколькими линиями в осевом направлении. Это делает набор данных эффективно 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 точек сбора. Таким образом, все мои данные непрерывны во времени в каждой отдельной точке пространства.{п,T,U,В}пTU,В

Например, данные для одной точки будут выглядеть так:

Давление в зависимости от времени для одной точки U-скорость против времени для одной точки

Мне интересно показать, скажем, давление во всех точках за все время, чтобы показать вертикальные и осевые волны. Если бы я делал это вдоль одной линии (вертикальной или осевой), я мог бы использовать график с водопадом с осями (Y, время, давление). Но если бы у меня было 3 вертикальные линии и 3 осевые линии, это было бы 6 графиков водопада, чтобы получить полную картину движения волны в обоих направлениях. Пространственные координаты являются дискретными переменными, а поле (в данном случае Давление) и время непрерывны.

T0.000125

Есть ли способ, чтобы показать их все сразу? Обычно можно добавить цвет, чтобы сделать «четвертое» измерение видимым, но есть ли другой возможный подход? Я планирую подготовить как можно больше способов, чтобы увидеть, раскрывает ли что-то информацию, которую другие не представляют, поэтому, пожалуйста, поделитесь своими идеями.

Что если симуляция была 3D, и у меня был 5D результирующий набор данных? Меняет ли это возможные методы визуализации?


Все размеры дискретны или непрерывны? Если да, то какие?
naught101

(X, Y) дискретны, а (P, время) непрерывны.
tpg2114

Я рекомендую рассматривать огранку в качестве альтернативы (или дополнения) 3-й
Майкл Бишоп

Это должен быть статический график, который можно распечатать? Если нет, то вы можете показать свои данные в виде серии графиков с интервалом времени. Если я правильно помню, программное обеспечение JMP делает такие вещи.
Эмиль Фридман

1
@ naught101 Обновлено в соответствии с.
tpg2114

Ответы:


14

У меня были некоторые семимерные данные. Хотя я наконец-то остановился на небольшом выборе трехмерных слайсов, одним из вариантов является график параллельных координат . Это работает для произвольного числа измерений! Из Википедии:

Параллельные координаты - это распространенный способ визуализации многомерной геометрии и анализа многомерных данных.

Чтобы показать набор точек в n-мерном пространстве, рисуется фон, состоящий из n параллельных линий, обычно вертикальных и равномерно распределенных. Точка в n-мерном пространстве представляется в виде ломаной с вершинами на параллельных осях; положение вершины на i-й оси соответствует i-й координате точки.

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


Это отличный сюжет. Отличное использование цвета. Легенда была бы лучше на стороне, и переупорядочить, чтобы соответствовать цветам на последней оси, но это не жизненно важно.
ничто101

3
@ naught101 Это из Википедии, не стесняйтесь, присылайте туда улучшенный ;-)
gerrit

Это отличная техника!
Сохаиб, я

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

пзнак равнопмеaN ). Я вижу, что оба сравнительно легко сделать в matplotlib. Тот, где символ колеблется, заставляет меня думать о растровом графике, подобном этому: введите описание изображения здесь

На этом графике показаны профили скорости в разных осевых положениях, что дает вам двухмерную карту поля потока. Вертикальные линии представляют скорость 0. Области без точек не являются частью вычислительной области. Конечно, это не так просто расширить на 3D-данные ...


Для чего нужен белый квадрат?
ничто101

Это представление поля потока. Это поток за углом, профили представляют скорость в разных осевых точках ...
FrenchKheldar

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