Я работаю над двумерным физическим моделированием и собираю данные во времени в нескольких точках. Эти дискретные точки расположены вдоль вертикальных линий с несколькими линиями в осевом направлении. Это делает набор данных эффективно 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 точек сбора. Таким образом, все мои данные непрерывны во времени в каждой отдельной точке пространства.
Например, данные для одной точки будут выглядеть так:
Мне интересно показать, скажем, давление во всех точках за все время, чтобы показать вертикальные и осевые волны. Если бы я делал это вдоль одной линии (вертикальной или осевой), я мог бы использовать график с водопадом с осями (Y, время, давление). Но если бы у меня было 3 вертикальные линии и 3 осевые линии, это было бы 6 графиков водопада, чтобы получить полную картину движения волны в обоих направлениях. Пространственные координаты являются дискретными переменными, а поле (в данном случае Давление) и время непрерывны.
Есть ли способ, чтобы показать их все сразу? Обычно можно добавить цвет, чтобы сделать «четвертое» измерение видимым, но есть ли другой возможный подход? Я планирую подготовить как можно больше способов, чтобы увидеть, раскрывает ли что-то информацию, которую другие не представляют, поэтому, пожалуйста, поделитесь своими идеями.
Что если симуляция была 3D, и у меня был 5D результирующий набор данных? Меняет ли это возможные методы визуализации?
Ответы:
У меня были некоторые семимерные данные. Хотя я наконец-то остановился на небольшом выборе трехмерных слайсов, одним из вариантов является график параллельных координат . Это работает для произвольного числа измерений! Из Википедии:
источник
Графики пар : это не метод уменьшения размерности, но это действительно хороший способ получить быстрый обзор того, где могут лежать некоторые значимые отношения. В R базовый пакет содержит
pairs()
функцию, которая хороша для непрерывных данных (она преобразует все в непрерывные данные). Лучшая функцияggpairs()
изGGally
пакета:источник
Анализ основных компонентов, как правило, является хорошим выбором для уменьшения измерений в большинстве случаев, я не уверен, что он подойдет для вашей конкретной проблемы, но он найдет ортогональные измерения, по которым будет получено большинство вариантов выборок данных. Если вы разрабатываете в R, вы можете
prcomp()
просто преобразовать исходную матрицу точек данных в форму PCA.источник
Вот несколько способов изображения трехмерных данных с помощью ggplot2. Вы можете комбинировать подходы (сетки фасетов, цвета, формы и т. Д.), Чтобы увеличить размерность вашей графики.
источник
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.На этом графике показаны профили скорости в разных осевых положениях, что дает вам двухмерную карту поля потока. Вертикальные линии представляют скорость 0. Области без точек не являются частью вычислительной области. Конечно, это не так просто расширить на 3D-данные ...
источник