我有一个分组的条形图,我想比较这些值。我知道我想用线条来形象化它。我尝试了以下代码,输出也是如下
Y=rand(5,5)
str = {'A'; 'B'; 'C'; 'D'; 'E';};
bar_widh=0.2;
h = bar(Y,bar_widh);
hold on;plot(Y,'b');
set(gca, 'XTickLabel',str, 'XTick',1:numel(str))
grid on
l = cell(1,5);
l{1}='P'; l{2}='Q'; l{3}='R'; l{4}='S'; l{5}='T';
legend(h,l);
我得到了以下输出:
我想要显示最小数量/更大数量的柱子。在某些情况下,较大的值是坏的。你能帮我画一下与条相同的颜色吗
我输出如下
答案 0 :(得分:2)
你可以试试这个:
Y=rand(5,5);
str = {'A'; 'B'; 'C'; 'D'; 'E';};
bar_widh=0.2;
figure; hold on;grid on
h = bar(Y,bar_widh);
% to highlight the minimum of each group,
% copy data into a new matrix
Y_ = Y;
% find the minimum values and make the rest zeors
Y_(Y_~=repmat(min(Y_,[],1),size(Y,1),1)) = 0;
% then plot with so sort of highlighting
h2 = bar(Y_,0.5);
pause(0.1) % pause to allow bars to be drawn
% now go through each group of bars and plot the line
for i = 1:numel(h)
x = h(i).XData + h(i).XOffset; % find the x coordinates where the bars are plotted
ax = plot(x,Y(:,i)); % plot the line
% set color of the bars the same as the line
h(i).FaceColor = ax.Color;
h2(i).FaceColor = ax.Color;
end
set(gca, 'XTickLabel',str, 'XTick',1:numel(str))
legend('P','Q','R','S','T');
h(i).XData
是第i组条的中心坐标。
例如,在您的情况下:
h(1).XData = [ 1 2 3 4 5 ]; % group P
h(2).XData = [ 1 2 3 4 5 ]; % group Q
...
h(5).XData = [ 1 2 3 4 5 ]; % group T
h(i).XOffset
是组中每个条与其对应中心坐标的偏移值。
例如,在您的情况下:
h(1).XOffset = -0.3077; % group P
h(2).XOffset = -0.1538; % group Q
...
h(5).XOffset = 0.3077; % group T