Tengo algunos datos (discretos) del tipo $ \ {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}}
y «estoy buscando hacer un histograma 3D a partir de esto, con rectángulos de altura $ z_i $ y base cuadrada ubicada en el plano en la posición $ x_i, y_i $ . Esto solía ser posible usando` `GeneralizedBarChart3D " pero esto ha sido reemplazado por RectangleChart3D y no puedo hacerlo funcionar.
Lo mejor que puedo hacer ahora es
ListPointPlot3D[data, Filling -> Bottom]
que produce algo como
donde los puntos están ubicados correctamente y a la altura correcta, pero quiero tener un rectángulo (con una base cuadrada de ancho 1) de la altura correcta en lugar de un punto.
Se agradecería cualquier ayuda.
Comentarios
Respuesta
Transform data
en un objeto WeightedData
y utilícelo con Histogram3D
:
wd = WeightedData[data[[All, ;; 2]], data[[All, -1]]]; Histogram3D[wd, {1}, ColorFunction -> "Rainbow"]
Cambie la especificación del contenedor a {2}
:
Histogram3D[wd, {2}, ColorFunction -> "Rainbow"]
Para mostrar elementos de datos con peso cero, reemplace s en la tercera columna de datos con un número pequeño (digamos, 10^-6
):
wd2 = WeightedData[data[[All, ;; 2]], data[[All, -1]] /. 0 -> 10^-6]; Histogram3D[wd2, {1}, ColorFunction -> "Rainbow"]
Respuesta
No tiene un histograma, sino un gráfico de barras 3D, ya que las alturas no suman 1 o el tamaño total de la muestra. Pero con su conjunto de datos particular donde todas las combinaciones de valores para cada dimensión (pasando de 4 a 10 en pasos de 2) están disponibles, uno puede usar fácilmente DiscretePlot3D
:
DiscretePlot3D[data[[4 (i/2 - 2) + j/2 - 1, 3]], {i, 4, 10, 2}, {j, 4, 10, 2}, ExtentSize -> Full, FillingStyle -> Opacity[1]]
Un enfoque alternativo que evita la " gimnasia " que mencionas es usar una matriz dispersa:
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]]
Comentarios
- Agradable. Tienes que hacer bastante gimnasia para generar el formato adecuado para la trama …
- Tal vez necesites más ejercicio. 😉
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]