Столбчатая диаграмма в MATLAB - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь создать гистограмму в MATLAB, где позиции столбцов находятся в одном столбце, высоты столбцов - в другом, а столбцы располагаются друг над другом, когда две или более позиций перекрываются.

Чтобы проиллюстрировать, вот тот же график, созданный в R с помощью ggplot:

library(ggplot2)

data <- data.frame(name=c('A', 'B', 'C', 'D', 'E', 'F'),
                   pos=c(0.1, 0.2, 0.2, 0.7, 0.7, 0.9),
                   height=c(2, 4, 1, 3, 2, 1))

ggplot(data, aes(x=pos, y=height, fill=name)) +
  geom_bar(stat='identity', width=0.05)

stacked bar chart created in R

Для сравнения, в MATLAB те же данные выглядят так:

data = [ 0.1, 0.2, 0.2, 0.7, 0.7, 0.9; ... 
    2, 4, 1, 3, 2, 1]';

Но я не могу понять, есть ли комбинация параметров для функции bar для создания гистограммы с накоплением такого же типа.

1 Ответ

0 голосов
/ 07 ноября 2018

Вот один из способов сделать это (это немного сложнее в MATLAB):

[binCenters, ~, binIndex] = unique(data(:,1));
nBins = numel(binCenters);
nBars = numel(binIndex);
barData = zeros(nBins, nBars);
barData(binIndex+nBins.*(0:(nBars-1)).') = data(:, 2);
bar(binCenters, barData, 'stacked');
legend('A', 'B', 'C', 'D', 'E', 'F');

enter image description here


Ключ заключается в том, чтобы отформатировать данные, передаваемые в bar, в матрицу таким образом, чтобы каждая строка содержала значения для одного стека, а каждый столбец представлял собой различную группировку с разными цветами. По сути, barData заканчивается в основном нулями с одним ненулевым значением на столбец:

barData =

     2     0     0     0     0     0
     0     4     1     0     0     0
     0     0     0     3     2     0
     0     0     0     0     0     1
...