Bar Plot Legend and Axes
2 views (last 30 days)
Show older comments
I have some data which I plotted as,
What I want to do would look something similar to,
I opened another figure and copied the subplots manually, I don't know how to code this to automatically work and look cleaner.
Moreover, the legend entries don't seem to match colors. I think it's not correct.
Is it possible that I remove the YTickLabels from the subplots axes and instead write down the values on the bar chart.
Any help would be highly appreciated.
There's a lot of difference between values. If I plot them all on one plot, then some data might look too small.
My code is given below
clear;close all;clc
set(0,'DefaultLineLineWidth',2);
successful_steps = [17;48;21;18];
rejected_steps = [3;17;6;4];
func_evaluations = [145;182;165;148];
execution_time = [110;80;66;61];
figure(1);
subplot(141);hold on;grid off;box off;
x = gca;
b1 = bar(successful_steps,'FaceColor','Flat');
b1.CData(1,:) = [0 0.8 0.8];
b1.CData(2,:) = [0.4940 0.1840 0.5560];
b1.CData(3,:) = [0.6350 0.0780 0.1840];
b1.CData(4,:) = [0 0.4470 0.7410];
xlabel({'Successful';'Steps'},'FontSize',12);
x.XTickLabels = {''};
subplot(142);hold on;grid off;box off;
x = gca;
b1 = bar(rejected_steps,'FaceColor','Flat');
b1.CData(1,:) = [0 0.8 0.8];
b1.CData(2,:) = [0.4940 0.1840 0.5560];
b1.CData(3,:) = [0.6350 0.0780 0.1840];
b1.CData(4,:) = [0 0.4470 0.7410];
xlabel({'Rejected';'Steps'},'FontSize',12);
x.XTickLabels = {''};
subplot(143);hold on;grid off;box off;
x = gca;
b1 = bar(func_evaluations,'FaceColor','Flat');
b1.CData(1,:) = [0 0.8 0.8];
b1.CData(2,:) = [0.4940 0.1840 0.5560];
b1.CData(3,:) = [0.6350 0.0780 0.1840];
b1.CData(4,:) = [0 0.4470 0.7410];
xlabel({'Function';'Evaluations'},'FontSize',12);
x.XTickLabels = {''};
subplot(144);hold on;grid off;box off;
x = gca;
b1 = bar(execution_time,'FaceColor','Flat');
b1.CData(1,:) = [0 0.8 0.8];
b1.CData(2,:) = [0.4940 0.1840 0.5560];
b1.CData(3,:) = [0.6350 0.0780 0.1840];
b1.CData(4,:) = [0 0.4470 0.7410];
xlabel({'Execution';'Time'},'FontSize',12);
x.XTickLabels = {''};
sgtitle('Performance Comparison of xyz Methods','FontSize',16,'FontWeight','Bold');
figure(2);hold on;grid off;box on
ax = gca;
h1 = plot(0,[0 0.8 0.8]);
h2 = plot(0,[0.4940 0.1840 0.5560]);
h3 = plot(0,[0.6350 0.0780 0.1840]);
h4 = plot(0,[0 0.4470 0.7410]);
legend('M1','M2','M3','M4','Orientation','Horizontal','Box','Off');
ax.XTickLabels = {''};
ax.YTickLabels = {''};
title('Performance Comparison of xyz Methods','FontSize',16,'FontWeight','Bold');
xlabel({'';''},'FontSize',12);
0 Comments
Answers (1)
Constantino Carlos Reyes-Aldasoro
on 7 Mar 2022
Hi
First, to plot the subplots together, you need to grab the handles of each axes, i.e.
figure
h1=subplot(141);
h2=subplot(142);
h3=subplot(143);
h4=subplot(144);
h4=subplot(144);
The handles contain the position as well as many many more things:
h1.Position
which comes in starting point horizontal/vertical size horizontal/vertical.
Once you have the basic position, you can modify, if you want them to be exactly next to each other, you can just make them of a certain width (say 0.2) and then separate them by the same:
h1.Position =[0.1 0.1 0.2 0.8];
h2.Position =[0.3 0.1 0.2 0.8];
h3.Position =[0.5 0.1 0.2 0.8];
h4.Position =[0.7 0.1 0.2 0.8];
and presto, just next to each other. Let me think about the legend.
0 Comments
See Also
Categories
Find more on Axis Labels in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!