Jai des données (discrètes) du type $ \ {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}}
et je « cherche à en faire un histogramme 3D, avec des rectangles de hauteur $ z_i $ et une base carrée située dans le plan à la position $ x_i, y_i $ . Cela était possible en utilisant` `GeneralizedBarChart3D " mais cela a été remplacé par RectangleChart3D et je ne peux pas le faire fonctionner.
Le mieux que je puisse faire pour le moment est
ListPointPlot3D[data, Filling -> Bottom]
qui produit quelque chose comme
où les points sont correctement situés et à la bonne hauteur, mais je veux avoir un rectangle (avec une base carrée de largeur 1) de la bonne hauteur plutôt quun point.
Toute aide serait appréciée.
Commentaires
Réponse
Transformer data
dans un objet WeightedData
et utilisez-le avec Histogram3D
:
wd = WeightedData[data[[All, ;; 2]], data[[All, -1]]]; Histogram3D[wd, {1}, ColorFunction -> "Rainbow"]
Remplacez la spécification du bac par {2}
:
Histogram3D[wd, {2}, ColorFunction -> "Rainbow"]
Pour afficher les éléments de données avec un poids nul, remplacez s dans la troisième colonne de données avec un petit nombre (par exemple, 10^-6
):
wd2 = WeightedData[data[[All, ;; 2]], data[[All, -1]] /. 0 -> 10^-6]; Histogram3D[wd2, {1}, ColorFunction -> "Rainbow"]
Réponse
Vous navez pas dhistogramme mais vraiment un histogramme 3D car les hauteurs ne sont pas égales à 1 ou à une taille déchantillon totale. Mais avec votre jeu de données particulier où toutes les combinaisons de valeurs pour chaque dimension (allant de 4 à 10 par étapes de 2) sont disponibles, on peut facilement utiliser DiscretePlot3D
:
DiscretePlot3D[data[[4 (i/2 - 2) + j/2 - 1, 3]], {i, 4, 10, 2}, {j, 4, 10, 2}, ExtentSize -> Full, FillingStyle -> Opacity[1]]
Une approche alternative qui évite la " gymnastique " que vous mentionnez est dutiliser un tableau fragmenté:
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]]
Commentaires
- Sympa. Vous devez faire un peu de gymnastique pour générer le format approprié pour lintrigue …
- Peut-être avez-vous besoin de plus dexercice. 😉
Histogram3D[Function[y, Table[{y[[1]], y[[2]]}, y[[3]]]] /@ (Function[x, {x[[1]], x[[2]], x[[3]]*10000}] /@ data)]
ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0]
ListPlot3D[data, Filling -> Bottom, InterpolationOrder -> 0, PlotRange -> {{3, 11}, {3, 11}}, ColorFunction -> "SouthwestColors", Mesh -> None]