불연속 데이터의 3D 히스토그램

$ \ {x_i, y_i 유형의 (불연속) 데이터가 있습니다. z_i \} $

data={{4, 4, 0.6570}, {6, 4, 0.8240}, {8, 4, 0.8930}, {10, 4, 0.9330},{4,6, 0.2780}, {6,6,0.5660}, {8, 6, 0.7460}, {10, 6, 0.8320}, {4, 8,0}, {6, 8, 0.2620}, {8, 8, 0.5100}, {10, 8, 0.6100}, {4,10, 0}, {6,10, 0.04900}, {8, 10, 0.2370}, {10, 10, 0.3940}} 

그리고 저는 이로부터 높이가 $ z_i $ $ x_i, y_i $ 위치에있는 평면에있는 정사각형베이스. 이것은“GeneralizedBarChart3D를 사용하여 가능했습니다. "하지만 이것은 RectangleChart3D로 대체되어 작동하지 않습니다.

지금 할 수있는 최선은

ListPointPlot3D[data, Filling -> Bottom] 

다음과 같은 결과물 생성

여기에 이미지 설명 입력

포인트가 올바른 위치와 높이에 있지만, 포인트가 아닌 올바른 높이의 사각형 (너비 1의 정사각형베이스)을 원합니다.

어떤 도움을 주시면 감사하겠습니다.

댓글

h3>

  • Histogram3D[Function[y, Table[{y[[1]], y[[2]]}, y[[3]]]] /@ (Function[x, {x[[1]], x[[2]], x[[3]]*10000}] /@ data)]
  • 보간 순서가 0 인 ListPlot3D를 사용할 수 있습니다. ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0]
  • 데이터 포인트 {4, 4, 0.6570}을 설명하기 위해 포인트 {4,4} 0.6570 * 10000 = 6570 번 (임시 배열에)을 추가합니다. 모든 점에 대해이 작업을 반복 한 다음이 임시 배열의 히스토그램 (3D)을 플로팅합니다 (6570 회 반복 {4,4} 포함).
  • @Carl에서 빌드 '의 댓글 ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0, PlotRange -> {{3, 11}, {3, 11}}, ColorFunction -> "SouthwestColors", Mesh -> None]
  • @HarshalGajjar 감사합니다 … 어떻게 든 기능 " GeneralizedBarChart3D "는 실제로 대체되지 않았습니다.

답변

WeightedData 개체로 변환하고 Histogram3D :

wd = WeightedData[data[[All, ;; 2]], data[[All, -1]]]; Histogram3D[wd, {1}, ColorFunction -> "Rainbow"] 

여기에 이미지 설명 입력

빈 사양을 {2}로 변경 :

Histogram3D[wd, {2}, ColorFunction -> "Rainbow"] 

여기에 이미지 설명 입력

가중치가 0 인 데이터 요소를 표시하려면 데이터의 세 번째 열에 작은 숫자 (예 : 10^-6) :

wd2 = WeightedData[data[[All, ;; 2]], data[[All, -1]] /. 0 -> 10^-6]; Histogram3D[wd2, {1}, ColorFunction -> "Rainbow"] 

여기에 이미지 설명 입력

답변

히스토그램은 없지만 실제로는 3D 막대 차트가 있습니다. 높이의 합이 1 또는 전체 샘플 크기가 아니기 때문입니다. 그러나 각 측정 기준에 대한 모든 값 조합 (2 단계에서 4에서 10까지)을 사용할 수있는 특정 데이터 세트에서는 DiscretePlot3D를 쉽게 사용할 수 있습니다.

DiscretePlot3D[data[[4 (i/2 - 2) + j/2 - 1, 3]], {i, 4, 10, 2}, {j, 4, 10, 2}, ExtentSize -> Full, FillingStyle -> Opacity[1]] 

3D 막대 차트

당신이 언급 한 " 체조 "를 피하는 다른 접근 방식은 희소 배열을 사용하는 것입니다.

data = {{4, 4, 0.6570}, {6, 4, 0.8240}, {8, 4, 0.8930}, {10, 4, 0.9330}, {4, 6, 0.2780}, {6, 6, 0.5660}, {8, 6, 0.7460}, {10, 6, 0.8320}, {4, 8, 0}, {6, 8, 0.2620}, {8, 8, 0.5100}, {10, 8, 0.6100}, {4, 10, 0}, {6, 10, 0.04900}, {8, 10, 0.2370}, {10, 10, 0.3940}} sa = SparseArray[{#[[1]], #[[2]]} -> #[[3]] & /@ data] DiscretePlot3D[sa[[i, j]], {i, 4, 10, 2}, {j, 4, 10, 2}, ExtentSize -> Full, FillingStyle -> Opacity[1]] 

희소 배열을 사용한 3D 막대 그림 대체 접근 방식

댓글

  • 좋습니다. 플롯에 적합한 형식을 생성하려면 꽤 많은 체조를해야합니다 …
  • 운동이 더 필요할 수도 있습니다. 😉

답글 남기기

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