Как сделать нижнее значение в гистограмме видимым? - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь прочитать значения из электронной таблицы и построить их с помощью MATLAB.Однако, когда значения первого набора данных становятся ниже, он становится скрытым сзади, как видно для значений 80 и 100 ниже:

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 голосов
/ 28 апреля 2018

Из того, что я понимаю, для случая, когда синие полосы короче, чем красные, они должны появиться спереди.К сожалению, 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. Синий над красным (когда красный выше).

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

...