how to print the values of each bar on top of it; multibar and subplots

1 visualización (últimos 30 días)
Hello, I'm desperately searching an easy way to print my values on my bars. At the moment I have this: https://imageshack.us/photo/my-images/59/barsm.jpg/ Sorry for the bad quality. As you perhaps can see I have characters only under every bar or additionally in or over every bar. I only want the values once per diagramm and I think the most eye appealing solution would be right on top of every bar.
Unfortunately I don't understand this code, so I don't know whats going wrong here and cant correct it.
This is the code:
% code
% the data
d=[
4 8 9 7 4
8 7 5 5 8
2 7 1 4 9
];
lab={
'ab' 'bc' 'ef' 'ww' 'qq'
'q' 'd' 'c' 'w' 'r'
'w' 'i' 'yr' 'w' 'r'
};
% the engine
bh=bar(d);
xd=get(bh,'children');
xd=get([xd{:}],'xdata');
xd=cat(2,xd{:});
xdd=diff(xd);
xd=sort(xd(1,:)+.5*xdd(2,1));
set(gca,'xtick',xd);
set(gca,'xticklabel',lab.');
yl=get(gca,'ylim');
set(gca,'ylim',[yl(1),yl(2)+3]);
text(xd,repmat(11,1,numel(xd)),lab.','horizontalalignment','center');

Respuesta aceptada

Image Analyst
Image Analyst el 4 de En. de 2013
Replace the last line:
text(xd,repmat(11,1,numel(xd)),lab.','horizontalalignment','center');
with these two lines:
yValues = d' + 0.5;
text(xd, yValues(:),lab.','horizontalalignment','center');

Más respuestas (2)

Teja Muppirala
Teja Muppirala el 4 de En. de 2013
Would something like this work?
Data1 = [1 2 0 3 4];
Data2 = [2 3 4 5 5];
hb = bar([Data1;Data2]);
% Find the x location of each bar
xvals = unique(cell2mat(get(findall(hb,'type','patch'),'xdata')));
xvals = mean(reshape(xvals,2,[]));
% Put the text there
text(xvals,[Data1 Data2],mat2cell([Data1 Data2]),...
'Vert','bot','horiz','cen','FontName','Arial','Fontsize',12);
ylim([0 6])
  1 comentario
David
David el 4 de En. de 2013
nicely done. Also a very good answer. Can you tell me how I can use a matrix as input instead of arrays?

Iniciar sesión para comentar.


Hello kity
Hello kity el 3 de En. de 2013
Editada: Hello kity el 3 de En. de 2013
I was doing the same, found this for you:
x = [1 2 0 3 4];
xname = {'Foo','Bar','','Baz','Othername'};
bar(x)
text(1:numel(x),x,xname,'horizontalalignment','center','verticalalignment','bottom')
in case you use more variable in one bar then do following
for example
xname = {'Data1', 'Data2'};
bar(1, Data1, 'r')
hold on
bar(2, Data2, 'g')
text(1:2,[Data1 Data2], etc)
  1 comentario
David
David el 4 de En. de 2013
Editada: David el 4 de En. de 2013
Thank You!!! Can I use the second solution when I have a second variable?
I used:
Data1 = [1 2 0 3 4]
Data2 = [2 3 4 5 5]
But it tells me:
Error using bar (line 55)
X must be same length as Y.
But I have for one X multiple Y and I have multiple Xs.
If I use your solution I will have:
y y y y y y y y y y
x1x1x1x1x1x2x2x2x2x2
I need:
y y y y y y y y y y
x1 x2
So perhaps can I do this if I use your solution and only let with Text the x1 and x2 label appear once:
y y y y y y y y y y
x1 x2
But how can I have the white space between the bars:
y y y y y y y y y y
x1 x2
I believe the step from Excel to Matlab was not my best decision.

Iniciar sesión para comentar.

Categorías

Más información sobre Data Distribution Plots en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by