如何使条形图中的较低值可见?

时间:2018-04-25 16:35:39

标签: matlab plot bar-chart visualization matlab-figure

我正在尝试从电子表格中读取值并通过MATLAB绘制它们。但是,当第一个数据集的值变低时,它会隐藏在后面,如下面的值80100所示:

Bar Graph

我想也许是因为我正在同一点上绘制两个不同的bar图。如何将较短的条带放在前面?

以下是我的代码:

%{
Data example:    

Arrival_rate   per_A        per_B

30             46.361       44.892
60             30.585       25.602
80             20.674       23.352
100            16.209       18.597
%}

fig = figure('DefaultAxesFontSize',18);
set(0,'DefaultAxesFontName','Times New Roman');

arrival_rate = xlsread('Graph_data', 'Sheet2', 'H1:H6');
pe_a = xlsread('Graph_data', 'Sheet2', 'I1:I6');
pe_b = xlsread('Graph_data', 'Sheet2', 'J1:J6');
line = xlsread('Graph_data', 'Sheet2', 'K1:K6');

x1 = 30:1:100;
y1 = [46.361 44.892; 30.585 25.602; 16.209  18.597];
x2 = 30:1:100;
y2 = interp1(arrival_rate,line,x2,'pchip') ;

hold on 

ylabel('% error in VM_A')

% bar(arrival_rate,y,  0.2, 'b', 'DisplayName', 'Error in A') 
bar(arrival_rate,pe_a ,.1 , 'stacked','DisplayName', 'Error in A') 
bar(arrival_rate,pe_b, .1 , 'stacked', 'DisplayName', 'Error in B')

% bar(arrival_rate, y1, 0.2, 'hist')

plot(x2,y2,'k.','HandleVisibility','off','LineWidth',1) 
plot(arrival_rate,line,'k*', 'HandleVisibility','off','LineWidth',1) 


hold off

xlabel('\lambda (Clients/Hour) ')
ylabel('Error (%)')
%  title('Effect of Probability of a VM Type on awt of Clients')
legend show
legend('Location','Northeast')
set(gca,'XTick',(0:10:110))
set(gca,'YTick',(0:5:50))

set(gcf, 'PaperUnits', 'normalized')
set(gcf, 'PaperOrientation', 'landscape') 
set(gcf, 'PaperPosition', [0 0 1 1])  

1 个答案:

答案 0 :(得分:2)

根据我的理解,对于蓝色条比红色短的情况,它们应该出现在前面。遗憾的是,MATLAB并不能让您轻松地单独控制每个条形图,这应该暗示这不是他们打算做的事情。 (换句话说 - 考虑以有意义的方式可视化数据的其他方式是个好主意。)

我建议你让酒吧的宽度略有不同,这样你就可以轻松地一目了然地说出:

D = [...
30             46.361       44.892
60             30.585       25.602
80             20.674       23.352
100            16.209       18.597];

arrival_rate = D(:,1);
pe_a = D(:,2);
pe_b = D(:,3);

fig = figure('DefaultAxesFontSize',18);
bar(arrival_rate,pe_a ,.15 , 'stacked','DisplayName', 'Error in A'); hold on;
bar(arrival_rate,pe_b, .1 , 'stacked', 'DisplayName', 'Error in B');

给出:

Option 1

现在,如果你坚持按照自己的方式行事,我可以想到解决方案,但是扩展到超过2个群体将变得越来越困难。简而言之,你按照这个顺序制作图,然后它们会正确显示:

  1. 蓝色(可选:仅在蓝色较高的地方)。
  2. 红色。
  3. 蓝色红色(红色较高时)。
  4. fig = figure('DefaultAxesFontSize',18);
    
    bar(arrival_rate,pe_a, .1 , 'DisplayName', 'Error in A'); hold on;
    bar(arrival_rate,pe_b, .1 , 'DisplayName', 'Error in B');
    bar(arrival_rate(is_blue_smaller), pe_a(is_blue_smaller), .1 , ...
      'FaceColor', lines(1), 'HandleVisibility','off');
    

    产生:

    Option 2