{{x1, y1, z1}, {x2, y2, z2}, ...}
のようなデータセットがあるため、3D空間のポイントを記述します。このデータからヒートマップを作成したいと思います。そのため、密度の高いポイントは雲として表示され、密度に応じて異なる色でマークされます。
実際、このスクリプトの結果は3D専用です。
data = RandomReal[1, {100, 2}]; SmoothDensityHistogram[data, 0.02, "PDF", ColorFunction -> "Rainbow", Mesh -> 0]
コメント
回答
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]]
コメント
- 'を使用できません
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よりもはるかに高速です。
Image3D
…