Я знаю, что @Finn уже ответил на это, но когда я тестировал его решение, я не мог заставить его работать. Странно, но я понял, что даже оригинальный скрипт давал ошибки в моей системе. Возможно, у меня есть очень древняя версия MATLAB. Но опять же, мне интересно, если у кого-то еще есть проблема.
По какой-то причине я не могу установить член CData
для bar
.
В любом случае, после тестирования у меня это сработало.
clc
clear all
close all
values = [4 1 11 2 3; 4 1 5 2 -10];
names = {'Pre split total EON' 'Post split total EON'...
'Pre split pure EON' 'Post split pure EON' 'Post split Uniper';...
'Pre split total RWE' 'Post split total RWE'...
'Pre split pure RWE' 'Post split pure RWE' 'PostSplitInnogy'};
categories = {'EON','RWE'};
figure;
b = bar(values,'FaceColor','flat');
% only significant changes here
% ***********************************
col = ["r", "b", "y", "g", "cyan"];
for k = 1:size(values,2) % for fancier colors.
set(b(k), "FaceColor", col(k));
end
% ***********************************
ticksList = b(1).XData + arrayfun(@(x)x.XOffset, b)';
xticks(ticksList(:))
xticklabels([names(1,:)';names(2,:)'])
xtickangle(90)
ax1 = gca;
ax2 = axes('Position', get(ax1, 'Position'),'Color', 'none');
set(ax2, 'XAxisLocation', 'top','YAxisLocation','Right');
set(ax2, 'XLim', get(ax1, 'XLim'),'YLim', get(ax1, 'YLim'));
set(ax2, 'YTick', []);
xticks(b(1).XData)
xticklabels(categories)
Если вы хотите узнать больше о том, как назначаются имена цветов в MATLAB, отметьте здесь .
Еще одна вещь, с которой вы можете поиграть, это установить colormap
как объяснено здесь .