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
  • 를 살펴보세요 …

  • 답변 해 주셔서 감사하지만 아니요 Mathematica 8 사용
  • 좋은 예입니다 !! 저에게는 mathematica 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의 모든 점을 고려하기 위해 ' 위 링크에서 표시 한이 영역에 대해 궁금합니다.

답변

아래 코드 ( 여기 에서 수정 됨)는 Image3D 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

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다