2016-09-07 150 views
3

問題標籤分組條形圖上方

我生成的柱狀圖,並想以顯示欄本身(YDATA)上述各條的高度。因此,對於下面這張圖片來說,我希望在圖表上方有標籤。我無法找到解決辦法。爲了您的信息,我正在使用Matlab R2016a。

enter image description here

代碼

目前我使用下面的代碼來創建我的圖表。

x={ '-5-0' '0-5' '5-10' '10-15' '15-20' '20-25' '25-30' '30-35' '35-40' '40-45' '45-50' '50-55'}; 
before= [0 27 28 18 9 6 5 3 2 1 1 0] 
after= [27 28 18 9 6 5 3 2 1 1 0 0] 
y=[before',after'] 

h=figure; 
hold on 
yyaxis left 
l1=bar([1:12],y,'grouped'); 

hYLabel=ylabel('Tonnage [%]'); 
yyaxis right 
hylabel=ylabel('Tonnage [%]'); 
l1(1).FaceColor = [ 0 0.447 0.7410]; 
l1(1).EdgeColor = [ 0 0.447 0.7410]; 
l1(2).FaceColor =[0.85 0.325 0.098] 
l1(2).EdgeColor =[0.85 0.325 0.098] 
hTitle=title('Test'); 
hXLabel = xlabel('Value [$/t]'); 
hLegend=legend([l1(1),l1(2)], 'Test1', 'Test2'); 
set([gca,hTitle,hXLabel,hYLabel,hLegend] , 'FontName' , 'Helvetica','FontSize', 8) 
set(hTitle,'FontSize', 11) 
set(hLegend,'Fontsize',8,'Location', 'southoutside', 'Orientation','horizontal') 
set(gca,'XTick',[1:12]) 
xlim([0.5 12.5]) 
set(gca,'xticklabel',x.') 
set(gca,'LineWidth',1.0) 

hold off 

什麼我找 什麼我尋找快速例證。很明顯,我想在每列上面添加一個標籤。任何幫助將非常感激。

enter image description here

回答

3

你行後:

l1=bar([1:12],y,'grouped'); 

添加下面幾行:

x_shift = 0.15; 
text([1:12]-x_shift,y(:,1)+1,num2str(y(:,1)),... 
    'FontSize',12,'HorizontalAlignment','Center','Color',[0 0.447 0.7410]) 
text([1:12]+x_shift,y(:,2)+1,num2str(y(:,2)),... 
    'FontSize',12,'HorizontalAlignment','Center','Color',[0.85 0.325 0.098]) 

,你會得到:

Labeled bar

,如果你想要的百分比格式,並且還旋轉,那麼x_shift需要進行一點點調整,也y軸的限制,所以我把這裏的全部代碼爲:

x={'-5-0' '0-5' '5-10' '10-15' '15-20' '20-25' '25-30' '30-35'... 
    '35-40' '40-45' '45-50' '50-55'}; 
before= [0 27 28 18 9 6 5 3 2 1 1 0]; 
after= [27 28 18 9 6 5 3 2 1 1 0 0]; 
y=[before',after']; 
ax = axes('xticklabel',x.','LineWidth',1.0,'XTick',1:12); 
yyaxis(ax,'left') 
l1 = bar(ax,y,'grouped'); 
x1_shift = -0.17; 
x2_shift = 0.11; 
text([1:12]+x1_shift,y(:,1)+1,[num2str(y(:,1)) repmat('%',numel(y(:,1)),1)],... 
    'FontSize',12,'Rotation',90,'HorizontalAlignment','left',... 
    'VerticalAlignment','middle','Color',[0 0.447 0.7410]) 
text([1:12]+x2_shift,y(:,2)+1,[num2str(y(:,2)) repmat('%',numel(y(:,2)),1)],... 
    'FontSize',12,'Rotation',90,'HorizontalAlignment','left',... 
    'VerticalAlignment','middle','Color',[0.85 0.325 0.098]) 
ylabel('Tonnage [%]','FontName','Helvetica','FontSize',8); 
ylim([0 35]) 
yyaxis(ax,'right') 
ylabel('Tonnage [%]','FontName','Helvetica','FontSize',8); 
l1(1).FaceColor = [0 0.447 0.7410]; 
l1(1).EdgeColor = [0 0.447 0.7410]; 
l1(2).FaceColor = [0.85 0.325 0.098]; 
l1(2).EdgeColor = [0.85 0.325 0.098]; 
title('Test','FontName','Helvetica','FontSize', 11); 
xlabel('Value [$/t]', 'FontName' , 'Helvetica','FontSize', 8); 
hLegend = legend([l1(1),l1(2)], 'Test1', 'Test2'); 
set(hLegend,'Location','southoutside','Orientation','horizontal',... 
    'FontName', 'Helvetica','FontSize', 8) 
xlim([0.5 12.5]) 
ylim([0 35]) 
box off 

,你會發現我改變你的代碼一點,以使其更小巧,但它本質上不相同,併產生以下欄:

 percentage format

即使調整圖形大小,此處的標籤也將放置在相同的位置(相對於條形)。

+0

感謝您的回答,但即使您更改圖形的大小,也無法讓它們完全居中! – KiW

+0

@KiW我編輯了上面的代碼,以便標籤保持居中。如果您需要這些,我還添加了旋轉和百分比格式。 – EBH

1

可以在this post 使用像添加hold off前此行:
text(1 , y(1,1)+30, ['y = ', num2str(10)], 'VerticalAlignment', 'top', 'FontSize', 8)
現在你可以用這些參數玩,並把它變成一個循環超過evrey欄添加標籤。

編輯:
如果我理解你的權利,這是你想要的?
添加以下之前hold off

xt1=[1:12]-0.17; 
xt2=[1:12]+0.11; 
yt1=before+0.2; 
yt2=after+0.2; 

for i=1:12 
    text(xt1(i) , yt1(i), [num2str(y(i,1)), '%'], 'rotation', 90, 'FontSize', 6, 'Color',[0 0.447 0.7410]) 
    text(xt2(i) , yt2(i), [num2str(y(i,2)), '%'], 'rotation', 90, 'FontSize', 6, 'Color',[0.85 0.325 0.098]) 
end 

現在你也可以改變圖形的大小和文本停留在需要的位置。
結果如下所示:以Matlab2015 Bar Graph with Labels for every bar 順便說一句,我只訪問,所以我不能用你的所有功能,但代碼應該是罰款Matlab2016

+0

如果我想讓我的身材達到15.75釐米寬,那麼關於如何讓標籤完全在中間的任何想法? – KiW

+0

我編輯了我的初始文章。希望這是你正在尋找的東西。 – Koanashi