How to Plot Numbers on top of Bar graphs?

54 次查看(过去 30 天)
clc;
close all;
clear;
components = {'First Design', 'Second Design', 'Third Design'};
x = [66.5 33.5; 68.7 31.3; 64.9 35.1];
y = bar(x,'grouped');
xticklabels(components);
grid on
xlabel ('Design Name','fontweight','bold','FontSize',12);
ylabel ('Penetration Level (%)','fontweight','bold','FontSize',12);
legend('DG', 'PV');

采纳的回答

Star Strider
Star Strider 2022-10-22
Try this —
components = {'First Design', 'Second Design', 'Third Design'};
x = [66.5 33.5; 68.7 31.3; 64.9 35.1];
figure
y = bar(x,'grouped');
xtips1 = y(1).XEndPoints;
ytips1 = y(1).YEndPoints;
labels1 = string(y(1).YData);
text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
xtips2 = y(2).XEndPoints;
ytips2 = y(2).YEndPoints;
labels2 = string(y(2).YData);
text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
xticklabels(components);
grid on
xlabel ('Design Name','fontweight','bold','FontSize',12);
ylabel ('Penetration Level (%)','fontweight','bold','FontSize',12);
legend('DG', 'PV');
ylim([min(ylim) 75])
This should work in most recent releases. If it does not work in your release (since you did not specify that, I have no idea what it is), there are other options that will work. For the present, see the bar documentation section on Specify Labels at the Ends of Bars for details.
.
  5 个评论
AZ Sajjad
AZ Sajjad 2022-10-23
A lot of thanks, sir,
I'm so much grateful to you. :)

请先登录,再进行评论。

更多回答(2 个)

MarKf
MarKf 2022-10-22
编辑:MarKf 2022-10-22
Something like this?
Edit: ah, too slow. Though this very basic approach might work with earlier releases too. You could get() the x coords for the text from the bar handle too
components = {'First Design', 'Second Design', 'Third Design'};
x = [66.5 33.5; 68.7 31.3; 64.9 35.1];
ybar= bar(x,'grouped');
xticklabels(components);
grid on
xlabel ('Design Name','fontweight','bold','FontSize',12);
ylabel ('Penetration Level (%)','fontweight','bold','FontSize',12);
legend('DG', 'PV');
[r,c]=size(x);
ybuff=2;
for ri = 1:r
for ci = 1:c
text(ri+(-0.15+0.3*(ci-1)),x(ri,ci)+ybuff,num2str(x(ri,ci),'%0.0f%%'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
end
end
ylim([0 100])
  1 个评论
AZ Sajjad
AZ Sajjad 2022-10-22
Sir, your graph is so much beautiful. In particular, you mentioned the Percentage Unit. I really appreciate it.
By the way, sir
I needed a favor from you.
As in your previous graph, how can I mention the M$ Unit in this graph?
I have given the code below for ease of understanding.
clc;
close all;
clear;
figure
components = {'First Design', 'Second Design', 'Third Design'};
y = [4.735, 5.230, 4.568];
hB = bar(y,'FaceColor','flat');
xticklabels(components);
C = colororder; % retrieve default colororder vector
hB.CData = C(1:numel(y),:); % use first N
grid on
xlabel ('Design Name','fontweight','bold','FontSize',12);
ylabel ('Total Net Present Cost (M$)','fontweight','bold','FontSize',12);
text(1:length(y), y', num2str(y','%0.2f'),'HorizontalAlignment','center','VerticalAlignment','bottom')
hAx = gca; % get current axes handle
hAx.YAxis.TickLabelFormat = '%0.1f'; % fix up the funky numeric display
% now add a legend by faking another plot that will create the handles
hold on
hA = area(nan(numel(components))); % area will be patch
set(hA,{'FaceColor'},mat2cell(hB.CData,[ones(size(y))],3)); % set areas to match bar face colors
hLg = legend(hA,components);

请先登录,再进行评论。


Musalula Sinkala
Musalula Sinkala 2022-12-20
编辑:Musalula Sinkala 2022-12-20
A simple loop will do
figure()
bv = bar(x,'grouped');
% add the numbers
for ii = 1:numel(bv)
% the positions
xLoc = bv(ii).XEndPoints;
yLoc = bv(ii).YEndPoints;
% labels with %
theLabels = strcat( string(yLoc),'%') ;
% a vectorised one liner
text(xLoc, yLoc, theLabels, 'vert','bottom','horiz','center');
end

类别

Help CenterFile Exchange 中查找有关 Line Plots 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by