시각화를 위해 고차원 데이터를 줄이는 방법


19

2D 물리적 시뮬레이션을 진행 중이며 여러 시점에서 제 시간에 데이터를 수집하고 있습니다. 이 불연속 점은 세로선을 따라 있으며 축 방향으로 여러 줄이 있습니다. 이것은 데이터 셋을 효과적으로 4D로 만듭니다.

예를 들어 (X, Y) 좌표에 수집 지점이 있다고 가정합니다.

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

그리고 각 지점에서 수집합니다. 여기서 는 압력, 는 온도, 는 속도의 X 및 Y 성분입니다. 각 시뮬레이션 반복에서이 변수는 9 개의 수집 지점 모두에 대해 저장됩니다. 따라서 내 모든 데이터는 공간의 각 개별 지점에서 시간이 흐릅니다.P T U , V{,,,V},V

예를 들어 단일 지점의 데이터는 다음과 같습니다.

단일 지점에 대한 압력 대 시간 단일 포인트에 대한 U- 벨로 시티 vs 시간

나는 수직 및 축파를 보여주기 위해 항상 모든 지점에서 압력을 보여주는 것에 관심이 있습니다. 한 줄 (수직 또는 축)을 따라이 작업을 수행하면 축 (Y, 시간, 압력)이있는 폭포 그림을 사용할 수 있습니다. 그러나 3 개의 수직선과 3 개의 축선이 있다면 이것은 양방향으로 파도 운동의 완전한 그림을 얻는 6 개의 폭포 플롯입니다. 공간 좌표는 이산 변수이며 필드 (이 경우 압력)와 시간은 연속적입니다.

예를 들어, 위의 그림에서 의 큰 압력 피크 는 X 또는 Y 방향으로 이동할 수 있습니다.0.000125

한 번에 모두 표시하는 방법이 있습니까? 일반적으로 "네 번째"치수를 보이기 위해 색을 추가 할 수 있지만 다른 가능한 방법이 있습니까? 나는 다른 사람들이 모르는 정보를 드러내는 것이 있는지 가능한 한 많은 방법으로 계획 할 계획이므로 어떤 아이디어도 제시하십시오.

시뮬레이션이 3D이고 5D 결과 데이터 집합이있는 경우 어떻게합니까? 가능한 시각화 방법이 변경 되었습니까?


모든 치수가 불 연속적입니까, 아니면 연속적입니까? 그렇다면 어느 것이 어느 것입니까?
naught101

(X, Y)는 불연속적인 반면 (P, 시간)은 연속적입니다.
tpg2114

3D의 대안 (또는 보완)으로 대면을 고려 하는 것이 좋습니다.
Michael Bishop

인쇄 할 수있는 정적 플롯이어야합니까? 그렇지 않은 경우 데이터를 시간 경과 일련의 플롯으로 표시 할 수 있습니다. 올바르게 기억한다면 JMP 소프트웨어가 그런 일을합니다.
Emil Friedman

1
@ naught101 업데이트되었습니다.
tpg2114

답변:


14

나는 7 차원 데이터를 가지고있었습니다. 마지막으로 소량의 3 차원 슬라이스 스루를 선택했지만 평행 좌표 플롯 입니다. 이것은 임의의 수의 차원에서 작동합니다! Wikipedia에서 :

평행 좌표는 고차원 형상을 시각화하고 다변량 데이터를 분석하는 일반적인 방법입니다.

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로 3D 데이터를 묘사하는 몇 가지 방법입니다. 접근 방식 (면 격자, 색상, 모양 등)을 결합하여 그래픽의 차원을 높일 수 있습니다.

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

=미디엄이자형여기에 이미지 설명을 입력하십시오

이 그림은 다른 축 위치에서의 속도 프로파일을 보여 주어 2D 유동장 맵을 제공합니다. 수직선은 0의 속도를 나타냅니다. 점이없는 영역은 계산 영역의 일부가 아닙니다. 물론 이것은 3D 데이터로 쉽게 확장 할 수 없습니다 ...


흰색 사각형은 무엇입니까?
naught101

이것은 흐름 필드 표현입니다. 그것은, 프로파일은 ... 다른 축 방향 위치에서 속도를 코너 주위에 흐름을 나타내고있어
FrenchKheldar

확인. 답변에 설명을 추가하는 것이 좋습니다. 음모 자체는 꽤 불투명합니다.
naught101
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.