2016-09-07 4 views
3

通報ラベル

Iの棒グラフを生成していバー自体(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 

。明らかに、各列の上にラベルが必要です。どんな助けでも大歓迎です。
text(1 , y(1,1)+30, ['y = ', num2str(10)], 'VerticalAlignment', 'top', 'FontSize', 8)
は今、あなたはパラメータを指定して再生すると、evreyバーの上にラベルを追加するループのためにそれを置くことができます。

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

あなたはhold off前にこの行を追加しますthis post でのようなものを使用することができます。

編集:
私があなたを正しく理解していれば、これはあなたが望んだことですか?
は今、あなたはまた、図形の大きさを変更することができます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 

前に以下を追加し、テキストを所望の位置にとどまります。
結果は以下のようになります。ちなみに Bar Graph with Labels for every bar 、私はMatlab2015へのアクセスのみを持っていたので、私はあなたのすべての機能を使用することができませんでしたが、コードは、あなたの行の後Matlab2016

+0

私の姿を15.75cm幅にしたい場合は、ラベルを真ん中に入れる方法に関するアイデアはありますか? – KiW

+0

私の最初の投稿を編集しました。これが今あなたが探しているものであることを願っています。 – Koanashi