3Dヒートマップ密度プロット

{{x1, y1, z1}, {x2, y2, z2}, ...}のようなデータセットがあるため、3D空間のポイントを記述します。このデータからヒートマップを作成したいと思います。そのため、密度の高いポイントは雲として表示され、密度に応じて異なる色でマークされます。

実際、このスクリプトの結果は3D専用です。

data = RandomReal[1, {100, 2}]; SmoothDensityHistogram[data, 0.02, "PDF", ColorFunction -> "Rainbow", Mesh -> 0] 

ここに画像の説明を入力

コメント

  • Mathematica.SEへようこそ!
  • バージョン9はありますか?次に、 Image3D
  • 回答ありがとうございますが、いいえ、 Mathematica8を使う
  • これは素晴らしい例です!!私は数学9のImage3D関数を使用しましたが、問題はImage3D []関数を使用して各ボクセルの寸法を変更する方法です。
  • 質問を回答として投稿するのではなく、別の質問をする必要があります。 。

回答

3次元の分布をプロットする場合は、最初にそれを形成する必要があります!! SmoothDensityHistogramは値$ \ {x_i、y_i \} $の滑らかなカーネルヒストグラムをプロットしますが、ここには3次元データがあるため、SmoothKernelDistribution

data = RandomReal[1, {1000, 3}]; dist = SmoothKernelDistribution[data]; 

これで、3つの変数を持つ確率分布が得られました。したがって、ContourPlot3Dを使用して、PDFを3D等高線図として簡単にプロットできます。この関数は少し遅いと言われていることに注意してください。

ContourPlot3D[Evaluate@PDF[dist, {x, y, z}], {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, PlotRange -> All, Mesh -> None, MaxRecursion -> 0, PlotPoints -> 160, ContourStyle -> Opacity[0.45], Mesh -> None, ColorFunction -> Function[{x, y, z, f}, ColorData["Rainbow"][z]], AxesLabel -> {x, y, z}] 

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

輪郭を切り抜くために、オプションを使用しました!

RegionFunction -> Function[{x, y, z}, x < z || z > y] 

データポイントの密度が、の形状の原因であることを確認するために使用できる輪郭Graphics3D

pic = Graphics3D[{ColorData["DarkRainbow"][#[[3]]], PointSize -> Large, Point[#]} & /@ data, Boxed -> False]; Show[con, pic] 

ここに画像の説明を入力

BR

編集

フォローするには2Dの例を参考にして、密度の高い温かみのある色を取得します

 data = RandomReal[1, {500, 3}]; dist = SmoothKernelDistribution[data]; ContourPlot3D[Evaluate@PDF[dist, {x, y, z}], {x, -2, 2}, {y, -2, 2}, {z, -2, 2},PlotRange -> All, Mesh -> None, MaxRecursion -> 0, PlotPoints -> 150, ContourStyle -> Opacity[0.45], Contours -> 5, Mesh -> None, ColorFunction -> Function[{x, y, z, f}, ColorData["Rainbow"][f/Max[data]]], AxesLabel -> {x, y, z}, RegionFunction -> Function[{x, y, z}, x < z || z > y]] 

Mathematicaグラフィックス

コメント

  • 'を使用できませんListContourPlot3D編集気にしないでください、結果はひどいです。
  • ありがとう、編集を含むそのスクリプトは正確に機能します!ポイント画像と等高線図を組み合わせると、次のようになります。 oi47.tinypic.com/34g7otd.jpg 除外される領域をマークしました等高線図ですが、いくつかの点が含まれています…
  • @ user1936577より単純なユーザー名を使用することを検討してください;)すべての点が表示されないように、点にも同じ除外を使用する必要があります。 CasesまたはSelectを使用して関連するポイントを選択できます。
  • 名前を変更しただけです;)でも欲しいContourPlotのすべてのポイントを検討するために、'上記のリンクでマークしたこの領域について疑問に思っています

回答

以下のコード(ここから採用)は、関数

残念ながら、 Mathematica バージョン9でのみ使用できます。

ランダムな3Dデータ:

data = RandomReal[{-3, 3}, {5000, 3}]; 

ここでは、ビンに入れるドメイン(-3、3)とビニングの解像度を指定します。

binning = {-3, 3, .5}; 

生成する実際のコード図:

binned = BinCounts[data, binning, binning, binning]; dims = Dimensions@binned; normbinned = N[binned/Max[binned]]; coordswithdataAll = Table[{normbinned[[x, y, z]], {x, y, z}}, {x, 1, dims[[1]]}, {y, 1, dims[[2]]}, {z, 1, dims[[3]]}]; coordswithdata = Table[Select[coordswithdataAll[[j, i]], #[[1]] != 0 &], {j, dims[[1]]}, {i, dims[[1]]}]; cubes = {ColorData["Rainbow"][#1], Opacity@#1, EdgeForm[], Cuboid@#2} &; output = ParallelMap[cubes @@ # &, coordswithdata, {3}]; Graphics3D[output, PlotRange -> Transpose[{ConstantArray[1, 3], dims + 1}], Lighting -> "Neutral"] 

ボクセル

コメント

  • 賛成:)
  • +1は、回答1よりもはるかに高速です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です