視覚化のために高次元データを削減する方法


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つの収集ポイントすべてに対して保存されます。したがって、私のデータはすべて、空間内の各離散点で時間的に連続しています。{PTうんV}PTうんV

たとえば、単一ポイントのデータは次のようになります。

単一ポイントの圧力と時間 単一ポイントのU速度と時間

たとえば、すべてのポイントで圧力を常に表示して、垂直波と軸波を表示することに興味があります。これを1本の線(垂直または軸)に沿って行う場合、軸(Y、時間、圧力)のウォーターフォールプロットを使用できます。しかし、3本の垂直線と3本の軸線がある場合、これは6つのウォーターフォールプロットになり、両方向の波動の全体像を取得します。空間座標は離散変数ですが、フィールド(この場合は圧力)と時間が連続しています。

t0.000125

すべてを一度に表示する方法はありますか?通常、「4番目の」次元を表示するために色を追加できますが、別の可能なアプローチはありますか?できる限り多くの方法でプロットして、他の人が知らない情報が明らかになるかどうかを確認する予定です。アイデアを提案してください。

シミュレーションが3Dで、5Dの結果データセットがあった場合はどうなりますか?それは可能な視覚化方法を変えますか?


すべての次元は離散的ですか、それとも連続的ですか?もしそうなら、どれがどれですか?
-naught101

(X、Y)は離散的であり、(P、時間)は連続的です。
tpg2114

ファセットを3-dの代替(または補完)として検討することをお勧めします
Michael Bishop

印刷できる静的なプロットである必要がありますか?そうでない場合、経時的な一連のプロットとしてデータを表示できます。私の記憶が正しければ、JMPソフトウェアはそのようなことをします。
エミール・フリードマン

1
@ naught101が随時更新されました。
tpg2114

回答:


14

自分で7次元のデータをいくつか持っていました。最終的には3次元スライススルーの小さな選択に落ち着きましたが、1つのオプションはParallel Coordinates Plotです。これは、任意の数の次元で機能します!ウィキペディアから:

平行座標は、高次元のジオメトリを視覚化し、多変量データを分析する一般的な方法です。

n次元空間に一連のポイントを表示するために、通常は垂直で等間隔のn本の平行線で構成される背景が描画されます。n次元空間の点は、平行な軸上に頂点を持つポリラインとして表されます。i番目の軸上の頂点の位置は、ポイントのi番目の座標に対応します。

ここに画像の説明を入力してください


それは素晴らしいプロットです。色の優れた使用。凡例は横に配置され、最後の軸の色と一致するように並べ替えられますが、重要ではありません。
naught101

3
@ naught101それはウィキペディアからです、改善されたものをそこに送ってください;-)
gerrit

これは素晴らしいテクニックです!!
ソハイブ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

p=pmeanここに画像の説明を入力してください

このプロットは、異なる軸方向の位置での速度プロファイルを示し、流れ場の2Dマップを提供します。垂直線は速度0を表します。ドットのない領域は、計算ドメインの一部ではありません。もちろん、これは3Dデータに簡単に拡張できません...


白い四角は何のためですか?
naught101

これはフローフィールド表現です。それはコーナーの周りの流れであり、プロファイルは異なる軸方向の位置での速度を表します
...-FrenchKheldar

OK。答えに説明を追加することは理にかなっています。プロット自体はかなり不透明です
...- naught101
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.