How to achieve stacked bar graph with two 'y' values but same x axi

11 Ansichten (letzte 30 Tage)
Jasmeet Singh
Jasmeet Singh am 25 Apr. 2018
Bearbeitet: TED MOSBY am 18 Nov. 2024

Hello!

I am trying to show the lower value which is hidden at he back while plotting a stacked bar graph to come in front.

I am reading values from excel sheet

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;
   x2 = 30:1:100;
   y2 = interp1(arrival_rate,line,x2,'pchip') ;
hold on 
bar(arrival_rate,pe_a, .1 , 'stacked','DisplayName', 'Error in A') 
bar(arrival_rate,pe_b, .1 , 'stacked', 'DisplayName', 'Error in B ')
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 (%)')
   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]) 

the above code is what I wrote and it gives me an image attached below.

Is there a way to bring the blue bar forward as it has the lower value for the case of x =80 and 100.

Antworten (1)

TED MOSBY
TED MOSBY am 13 Nov. 2024
Bearbeitet: TED MOSBY am 18 Nov. 2024
You just need to change order of bar plotting according to the values as I have shown in the modified part from your code below:
% Interpolation for the line plot
x2 = 30:1:100;
y2 = interp1(arrival_rate, line, x2, 'pchip');
% Hold on for multiple plots
hold on
% Plot bars conditionally (smaller one in front)
for i = 1:length(arrival_rate)
if pe_a(i) < pe_b(i)
% Plot smaller bar first (pe_a), larger bar second (pe_b)
bar(arrival_rate(i), pe_b(i), 1, 'FaceColor', 'b');
bar(arrival_rate(i), pe_a(i), 1, 'FaceColor', 'r');
else
% Plot smaller bar first (pe_b), larger bar second (pe_a)
bar(arrival_rate(i), pe_a(i), 1, 'FaceColor', 'r');
bar(arrival_rate(i), pe_b(i), 1, 'FaceColor', 'b');
end
end
% Plot other lines
plot(x2, y2, 'k.', 'HandleVisibility', 'off', 'LineWidth', 1);
plot(arrival_rate, line, 'k*', 'HandleVisibility', 'off', 'LineWidth', 1);
% Finish the plot
hold off
% Set the legend only once outside the loop
legend({'Error in B', 'Error in A'}, 'Location', 'Northeast');
xlabel('\lambda (Clients/Hour) ')
ylabel('Error (%)')
Hope this helps!

Kategorien

Mehr zu Discrete Data Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by