How to achieve stacked bar graph with two 'y' values but same x axi
12 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
回答(1 个)
TED MOSBY
2024-11-13,5:43
编辑:TED MOSBY
2024-11-18,19:53
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!
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Discrete Data Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!