3D hisztogram diszkrét adatokból

Van néhány (diszkrét) $ \ {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}} 

és szeretnék ebből 3D-s hisztogramot készíteni, $ z_i $ és négyzet alakú alap a síkban a $ x_i, y_i $ pozícióban. Ez korábban a” GeneralizedBarChart3D “használatával volt lehetséges ", de ezt a RectangleChart3D váltotta fel, és nem tudom “működtetni”.

A legjobb, amit most tehetek:

ListPointPlot3D[data, Filling -> Bottom] 

ami ilyesmit eredményez

írja ide a kép leírását

ahol a pontok helyesen helyezkednek el, és a megfelelő magasságban vannak, de szeretnék, hogy ne egy, hanem a megfelelő magasságú téglalapot (négyzet alakú alapterülettel, amelynek szélessége 1) megfelelő legyen.

Minden segítséget értékelni fogunk.

Hozzászólások

  • Histogram3D[Function[y, Table[{y[[1]], y[[2]]}, y[[3]]]] /@ (Function[x, {x[[1]], x[[2]], x[[3]]*10000}] /@ data)]
  • Használhatja a ListPlot3D-t 0 interpolációs sorrendben: ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0]
  • A (z) {4, 4, 0.6570} adatpont elszámolásához hozzáadom a {4,4} 0.6570 * 10000 = 6570-szeres pontot (egy ideiglenes tömbbe). Ismételje meg ezt az összes ponttal, majd ábrázolja ennek az ideiglenes tömbnek a (3D) hisztogramját (3D), amely 6570-szer megismételt {4,4} -t tartalmaz.
  • A @Carl-ra építve div> s komment A 0d5bc4a090 “>

nem került igazán cserére.

Válasz

Átalakítás data WeightedData objektummá, és használja a Histogram3D :

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

írja ide a kép leírását

Változtassa meg a kuka specifikációját {2}:

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

írja ide a kép leírását

Ha nulladik súlyú adatelemeket szeretne megjeleníteni, cserélje le a következőt: s az adatok harmadik oszlopában kis számmal (mondjuk, 10^-6):

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

írja ide a kép leírását

Válasz

Önnek nincs hisztogramja, de valóban 3D sávdiagramja van, mivel a magasság nem lesz 1 vagy egy teljes minta. De az adott adatkészlettel, ahol az egyes dimenziók értékeinek összes kombinációja elérhető (4-től 10-ig haladva a 2-es lépésben), könnyen használható a 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 oszlopdiagram

Alternatív megközelítés, amely elkerüli az Ön által említett " tornát ", egy ritka tömb használata:

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 oszlopdiagram alternatív megközelítés ritka tömbvel

Megjegyzések

  • Szép. A cselekmény megfelelő formátumának elkészítéséhez elég sok tornát kell végezni …
  • Talán több gyakorlásra van szüksége. 😉

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük