離散データからの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の正方形の底辺)が必要な場合。

助けていただければ幸いです。

コメント

  • 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)をプロットします({4,4}を6570回繰り返します)。
  • @Carlで構築'のコメントListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0, PlotRange -> {{3, 11}, {3, 11}}, ColorFunction -> "SouthwestColors", Mesh -> None]
  • @HarshalGajjarありがとう…どういうわけか機能" GeneralizedBarChart3D "は実際には置き換えられませんでした。

回答

変換data WeightedData オブジェクトに入れ、 Histogram3D

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

ここに画像の説明を入力

ビンの指定を{2}に変更します:

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

ここに画像の説明を入力

重みがゼロのデータ要素を表示するには、iv id = “bf831を置き換えます小さい番号のデータの3番目の列にあるd0198 “>

(たとえば、10^-6):

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

ここに画像の説明を入力

回答

ヒストグラムはありませんが、高さが1または合計サンプルサイズにならないため、実際には3D棒グラフがあります。ただし、各ディメンションの値のすべての組み合わせ(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棒グラフ

あなたが言及した" gymnastics "を回避する別のアプローチは、スパース配列を使用することです:

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棒グラフの代替アプローチ

コメント

  • いいですね。プロットの適切な形式を生成するには、かなりの体操を行う必要があります…
  • もっと運動が必要な場合があります。 ;)

コメントを残す

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