3D histogram z diskrétních dat

Mám některá (diskrétní) data typu $ \ {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}} 

a já se z toho snažím vytvořit 3D histogram s obdélníky o výšce $ z_i $ a čtvercová základna umístěná v rovině na pozici $ x_i, y_i $ . To bylo možné pomocí„ GeneralizedBarChart3D " ale toto bylo nahrazeno RectangleChart3D a nemohu to fungovat.

To nejlepší, co teď mohu udělat, je

ListPointPlot3D[data, Filling -> Bottom] 

který vytváří něco jako

zde zadejte popis obrázku

kde jsou body správně umístěny a ve správné výšce, ale chci mít obdélník (se čtvercovou základnou šířky 1) správné výšky spíše než bod.

Jakákoli pomoc by byla oceněna.

Komentáře

  • Histogram3D[Function[y, Table[{y[[1]], y[[2]]}, y[[3]]]] /@ (Function[x, {x[[1]], x[[2]], x[[3]]*10000}] /@ data)]
  • Můžete použít ListPlot3D s 0 interpolačním pořadím: ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0]
  • Abychom zohlednili datový bod {4, 4, 0,6570}, přidám bod {4,4} 0,6570 * 10 000 = 6570krát (do dočasného pole). Opakujte to pro všechny body a poté vykreslete histogram (3D) tohoto dočasného pole (obsahujícího {4,4} opakovaných 6570krát).
  • V návaznosti na @Carl ' s komentář ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0, PlotRange -> {{3, 11}, {3, 11}}, ColorFunction -> "SouthwestColors", Mesh -> None]
  • @HarshalGajjar Díky … Nějak se funkce " GeneralizedBarChart3D " nebyl skutečně nahrazen.

Odpověď

Transformace data do WeightedData objektu a použít jej s Histogram3D :

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

zde zadejte popis obrázku

Změňte specifikaci koše na {2}:

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

sem zadejte popis obrázku

Chcete-li zobrazit datové prvky s nulovou váhou, nahraďte s ve třetím sloupci dat s malým číslem (řekněme 10^-6):

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

zde zadejte popis obrázku

Odpověď

Nemáte histogram, ale opravdu 3D sloupcový graf, protože výšky nesčítají 1 nebo celkovou velikost vzorku. Ale s vaší konkrétní datovou sadou, kde jsou k dispozici všechny kombinace hodnot pro každou dimenzi (od 4 do 10 v krocích po 2), lze snadno použít 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 sloupcový graf

Alternativní přístup, který se vyhýbá " gymnastice ", kterou zmiňujete, je použít řídké pole:

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]] 

alternativní přístup k 3D pruhovému grafu se řídkým polem

Komentáře

  • Hezké. Abyste vygenerovali správný formát zápletky, musíte udělat hodně gymnastiky …
  • Možná budete potřebovat více cvičení. 😉

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *