Как я могу создать сюжет barseries, используя сгруппированные и сложенные стили в MATLAB? - PullRequest
7 голосов
/ 16 мая 2011

В документации MATLAB bar указано следующее:

bar (..., 'style') определяет стиль баров. 'style' является 'grouped' или 'stacked'. Режим отображения по умолчанию «сгруппирован».

Тем не менее, я хотел бы достичь обоих одновременно. Позвольте мне уточнить, приведя пример:

Y = [1.0 0.5 0.7
     2.0 1.5 2.0
     5.0 4.0 5.0
     4.0 4.0 4.5
     3.0 2.0 2.0];

bar(Y,'group');

Этот код создает следующий сгруппированный график баров, с 5 различными наборами по 3 бара, сгруппированными вместе:

enter image description here

bar([repmat(0.5,5,1) Y(:,1)-0.5],'stack');

И этот код создает следующий составной график баров, используя только первый столбец определенной выше матрицы Y:

enter image description here

Я хотел бы объединить эти два, чтобы получить участок бары, который сгруппирован и сложен одновременно. Таким образом, желаемый результат будет похож на первое изображение, и каждый из трех столбцов в наборе будет сложен как второе изображение.

Ответы [ 3 ]

7 голосов
/ 16 мая 2011

Я не знаю, как получить BAR , чтобы построить для вас комбинированную сгруппированную / составную гистограмму. Тем не менее, вы можете сделать это самостоятельно, добавив строки с нулями к вашим Y данным, где вы хотите, чтобы группы баров были разделены, затем изменив оси x отметки и отметки соответственно. Вот пример:

>> Y = [1 2 3; ...  %# Sample data
        2 3 4; ...
        3 4 5; ...
        4 5 6; ...
        5 6 7; ...
        6 7 8; ...
        7 8 9; ...
        8 9 10; ...
        9 10 11];
>> newY = reshape([reshape(Y,3,[]); zeros(1,numel(Y)/3)],[],3)  %# Add zeroes
                                                                %#   for spacing
newY =

     1     2     3
     2     3     4
     3     4     5
     0     0     0    %# <--- Note zero rows
     4     5     6
     5     6     7
     6     7     8
     0     0     0
     7     8     9
     8     9    10
     9    10    11
     0     0     0

>> bar(newY,'stacked');  %# Create a stacked histogram
>> set(gca,'XLim',[0 12],'XTick',2:4:10,'XTickLabel',1:3);  %# Modify axes

А вот итоговая цифра:

enter image description here

4 голосов
/ 16 мая 2011

group vs stacked - это либо тип информации, либо тип. вам нужно быть творческим, чтобы делать то, что вы хотите сделать:

bar(Y,'stacked','BarWidth',0.3);
hold;
X = Y.*abs(randn(5,3));
bar(X,'stacked','BarWidth',0.3, 'Xdata', 1.3:1:5.3);
Z = Y.*abs(randn(5,3));
bar(X,'stacked','BarWidth',0.3, 'Xdata', 0.7:1:4.7);

быстрое сокращение: начните с накопленных данных, убедитесь, что barwidth достаточно мал, чтобы правильно разместить данные на графике, удерживайте график, затем добавьте другой гистограмму со смещением данных (Xdata).

enter image description here

2 голосов
/ 26 августа 2013

Я нашел эту функцию довольно полезной и легко настраиваемой. Я считаю, что это дает еще одно элегантное решение проблемы сгруппированных и сложенных гистограмм.

http://www.mathworks.com/matlabcentral/fileexchange/32884-plot-groups-of-stacked-bars

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