Участок баров с данными о высоте в Mathematica - PullRequest
1 голос
/ 31 декабря 2011

У меня есть матрица {{2, 1, 2, 2, 1}, {1, 3, 0, 1, 2}, {3, 3, 0, 3, 1}, {1, 1, 2, 1, 1}}, и я хочу сгенерировать трехмерный график, например, в общей сложности 4 * 5 = 20 баров.

Существует столбик высоты 2, основанный на маленьком квадрате (1, 1) (т. Е. Квадрат, образованный на плоскости xy точками {{0,0}, {0,1}, {1,1} , {1,0}}),

еще один столбик высоты 1, основанный на маленьком квадрате (1,2) (т. Е. Квадрат, образованный на плоскости xy точками {{0,1}, {0,2}, {1,2}, { 1,0}}),

...

еще один столбик высоты 3, основанный на маленьком квадрате (2,2) (т. Е. Квадрат, образованный на плоскости xy точками {{1,1}, {2,1}, {2,2}, { 1,2}})

...

и еще один столбик высотой 1, основанный на маленьком квадрате (4,5) (т. Е. Квадрат, образованный на плоскости xy точками {{3,4}, {4,4}, {4,5}, {3,5}})

Я не могу найти простой способ сделать это. Большое спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

То, что вы хотите, это BarChart3D.

Обратите внимание, эта функция существует в двух воплощениях:

  • В пакете BarCharts имеется BarChart3D. Эта функция делает из коробки то, что вы хотите, но в Mathematica 7+ она устарела.
  • Тогда в главном пространстве имен есть BarChart3D (только Mathematica 7+), который также может делать то, что вы хотите, но должен быть передан параметр ChartStyle -> "Grid", чтобы отобразить результат, который вы хочу.

Вот пример кода для обоих из них:

Mathematica 6 и ранее

<<BarCharts`;
data = {{2, 1, 2, 2, 1}, {1, 3, 0, 1, 2}, {3, 3, 0, 3, 1}, {1, 1, 2, 1, 1}};
BarChart3D[data]

Mathematica 7 и более поздние версии

data = {{2, 1, 2, 2, 1}, {1, 3, 0, 1, 2}, {3, 3, 0, 3, 1}, {1, 1, 2, 1, 1}};
BarChart3D[data, ChartLayout -> "Grid"]
3 голосов
/ 31 декабря 2011
data = {{2,1,2,2,1}, {1,3,0,1,2}, {3,3,0,3,1}, {1,1,2,1,1}};

BarChart3D[data, ChartLayout -> "Grid", BarSpacing -> 0]

enter image description here

Редактировать

Обновление после вики-вопроса:

BarChart3D[data, ChartLayout -> "Grid", BarSpacing -> {0, 0},
                 LabelingFunction -> (Row[{#1, Reverse[#2 - 1], Reverse[#2]}] &), 
                 AxesLabel -> {"x", "y", "z"}]

enter image description here

Здесь и x, и y-интервалы исчезают. Установив курсор на заданную полосу, вы получите z{x_min,y_min}{x_max,y_max}, сверху-красный, то есть: 2{4,1}{5,2}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...