필터 지우기
필터 지우기

bar plot, value on top

조회 수: 98 (최근 30일)
gabe
gabe 2012년 6월 8일
댓글: Junaid Qadir 2022년 5월 4일
Hi This actually works to some extent but the problem is i got all the values for each bar shown on top. So for each bar all the Y values are being shown.
x=[1:2:23]';
y=abs([121 41 20.6 12.5 8.1 5.8 4.4 3.5 3 2.7 2.3 2.1]);
bar(x,y)
text(x,y,num2str(y,'%0.2f'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
Please tell me what is wrong! Thanks!
  댓글 수: 2
Suleman  Zafar
Suleman Zafar 2016년 10월 26일
Hi gabe, Can you please help me with displaying the value on top of bar plot.I am using GUI and my 7 different coloured bars are continuously changing with analog input so the value should also change continuously on top. I would really apreciate your answer.
Elimelech Schreiber
Elimelech Schreiber 2020년 12월 9일
num2str(y,'%0.2f')
converts the numbers in y, into one long string, and therefor it's repeated above each bar.
you need to have a seperate string for each value. The easiest fix here woul be:
num2str(y','%0.2f')

댓글을 달려면 로그인하십시오.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2012년 6월 8일
x=[1:2:23]';
y=abs([121 41 20.6 12.5 8.1 5.8 4.4 3.5 3 2.7 2.3 2.1]);
bar(x,y)
for i1=1:numel(y)
text(x(i1),y(i1),num2str(y(i1),'%0.2f'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
end
  댓글 수: 5
Arjun Chiddarwar
Arjun Chiddarwar 2016년 11월 19일
What if I don't have an X axis data, I have data to be plotted on just the Y axes. Then?
Something like this -
Y=[198 138 172 188 190 192];
bar(Y);
Then?
Javier Gonzalez-Rocha
Javier Gonzalez-Rocha 2017년 8월 22일
Try generating an arbitrary x array of length equal to y. Omit the x array in your plot using the gca handle as shown below:
Y=[198 138 172 188 190 192];
% arbitrary array
X = 1:6;
figure
bar(X,Y);
labels = arrayfun(@(value) num2str(value,'%2.2f'),Y,'UniformOutput',false);
text(X,Y,labels,'HorizontalAlignment','center','VerticalAlignment','bottom')
% clears X axis data
set(gca,'XTick',[]);

댓글을 달려면 로그인하십시오.

추가 답변 (5개)

Elimelech Schreiber
Elimelech Schreiber 2017년 11월 5일
I've written a function to do just this. It's called barvalues, and is very easy yo use.
simply:
bar(x);
barvalues;
  댓글 수: 6
Luis Fernando Marzola da Cunha
Luis Fernando Marzola da Cunha 2019년 5월 4일
Elimelech Schreiber thank you very much. This function is very useful. Congratulations.
Giulia Grazioli
Giulia Grazioli 2021년 10월 21일
Hi @Elimelech Schreiber, I was looking for a way to write the values with "%" sing on top a bar graph and i get into yuor comment with your function. It solved all my problems, so thank you so much!!

댓글을 달려면 로그인하십시오.


Ross
Ross 2017년 3월 21일
Can be a little cleaner than the above solutions, by making a cell array with the labels in advance using the arrayfun function.
x=[1:2:23]';
y=abs([121 41 20.6 12.5 8.1 5.8 4.4 3.5 3 2.7 2.3 2.1]);
bar(x,y)
labels = arrayfun(@(value) num2str(value,'%2.1f'),y,'UniformOutput',false);
text(x,y,labels,...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')

Junaid Qadir
Junaid Qadir 2019년 1월 18일
편집: Junaid Qadir 2022년 5월 3일
Please Try this code, Hope your problem will be solved. Best of luck
clc
clear all
close all
x = [1 2 3 4 5 6 7 8 9 10];
y = [200 250 300 350 400 450 500 550 600 700 ];
z= bar(x,y)
for i1=1:numel(y)
text(x(i1),y(i1),num2str(y(i1),'%0.0f'),...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
end
% text(1,43,'42','Color','k','FontSize',9)
% plot(x,y, '->','LineWidth',2)
xlabel('Friends')
ylabel(' Record')
title('Friends List')
grid on
ax=gca;
ax.XTick = [1 2 3 4 5 6 7 8 9 10 ];
ax.XTickLabels = {'Junaid', ' Qadir' ,' Sahar ',' Ubaid ',' Munsif ',' Yousaf ',' Sami ','Najm',' Shakir', ' Pakistan'};
ax.XTickLabelRotation = 45;
z.FaceColor = 'flat';
% z.EdgeColor= '[1,0,0]';
z.CData(1,:) = [1,1,0];
z.CData(2,:) = [1,1,0];
z.CData(3,:) = [1,1,0];
z.CData(4,:) = [1,1,0];
z.CData(5,:) = [1,1,0];
z.CData(6,:) = [1,1,0];
z.CData(7,:) = [1,1,0];
z.CData(8,:) = [1,1,0];
z.CData(9,:) = [1,1,0];
z.CData(10,:) = [1,1,0];
  댓글 수: 4
Tony Castillo
Tony Castillo 2022년 5월 4일
x = [1 2 3 4 5];
y = [0.433 0.177 0.768 1.224; 0.379 0.158 0.267 0.320; 0.0406 0.016 0.031 0.0380; 0.0972 0.0371 0.0538 0.0483; 0.0777 0.0324 0.0552 0.0660];
bar(x,y)
ax=gca;
ax.XTick = [1 2 3 4 5];
ax.XTickLabels = {'xx', 'xy', 'aa', 'bb', 'cc'};
ax.XTickLabelRotation = 45;
Please try with this code
Junaid Qadir
Junaid Qadir 2022년 5월 4일
@Tony Castillo Good job, I appreciate your efforts.
x = [1 2 3 4 5];
y = [0.433 0.177 0.768 1.224; 0.379 0.158 0.267 0.320; 0.0406 0.016 0.031 0.0380; 0.0972 0.0371 0.0538 0.0483; 0.0777 0.0324 0.0552 0.0660];
bar(x,y)
ax=gca;
ax.XTick = [1 2 3 4 5];
ax.XTickLabels = {'xx', 'xy', 'aa', 'bb', 'cc'};
ax.XTickLabelRotation = 45;

댓글을 달려면 로그인하십시오.


Junaid Qadir
Junaid Qadir 2018년 12월 20일
@ Andrei Bobrov I really appreciate your experience. Thank You so much you solved my problem. Keep help with the needy peoples. Thanks

Tony Castillo
Tony Castillo 2019년 1월 18일
Hi guys,
But despite I have tried to put the avlues on the TOP/OVER every one bar, I could not, even in the code I already change botton for cap, but it has been unsuccesfull.
Could you help me to set the values on the peak of every one bar?.
The code is attached.
Thanks
untitled.png

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by