Как построить линейчатую диаграмму с одним столбцом в MATLAB? - PullRequest
7 голосов
/ 11 февраля 2020

Если я сделаю

bar([1 2 3 4 5;2 3 4 5 1], 'stacked')

, я получу два столбца суммированных значений, соответствующих двум строкам моих данных - как я и ожидал: example of two-bar stacked bar chart

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

bar([1 2 3 4 5], 'stacked')

, я просто получу пять отдельных столбцов - без стеков: enter image description here

Итак, как мне составить столбчатую диаграмму с одним столбцом?

Ответы [ 4 ]

5 голосов
/ 11 февраля 2020

(Для этого решения требуется MATLAB 2019b)

Цитирование документации:

bar (y) создает столбчатую диаграмму с одним столбцом для каждого элемента в y. Если y - матрица размером m на n, то bar создает m групп из n баров.

bar (x, y) dr aws бары в местах, указанных в x.

Используя первый синтаксис, каждый элемент вектора становится своим собственным баром. Используя второй синтаксис, x определяет, как понимать вектор. В вашем случае вам нужна одна группа:

bar(1,[1 2 3 4 5], 'stacked')

Для сравнения: Y=rand(1,5): example

4 голосов
/ 12 февраля 2020

Ответ Даниэля - это путь к go, но он работает только в последних версиях Matlab, начиная с R2019b.

Хакерское решение Андера работает путем создания второй, невидимый бар. Это имеет побочные эффекты; например, axis auto расширит оси.

Ниже приведен еще более хакерский подход, позволяющий избежать этих проблем. Он создает две полосы, а затем удаляет вторую, изменяя данные графических объектов:

values = [1 2 3 4 5]; 
h = bar([values(:).'; NaN(1, numel(values))], 'stacked');
XData = vertcat(h.XData);
XData = num2cell(XData(:,1));
[h.XData] = XData{:};
YData = vertcat(h.YData);
YData = num2cell(YData(:,1));
[h.YData] = YData{:};
4 голосов
/ 11 февраля 2020

Hacky решение:

bar([1 2 3 4 5;0 0 0 0 0], 'stacked')
set(gca,'xlim',[0.25 1.75])
0 голосов
/ 11 февраля 2020

Кажется, нет прямого решения! Это может помочь:

bar([1,2,3,4,5,6,7,8,9,10,11,12,13; nan(1,13)], 'Stacked');
set(gca,'xtick',1,'xlim',[0.25 1.75]);

[https://www.mathworks.com/matlabcentral/answers/295950-how-can-i-get-a-stacked-bar-graph-with-a-single-bar]

...