2017-05-01 12 views
1

データをmatlabのグループ化棒グラフに追加したいと思います。ただし、各バーの上部に各データを配置することはできません。通常のバーにthis questionthis oneを使用して、グループ化されたグラフに対して次のコードを試しましたが、xposとyposは正しくありません。どんな助けもありがとうございます。データラベルをmatlabのグループ化された棒グラフに追加します

a=[0.92,0.48,0.49]; 
b=[0.74,0.60,0.30]; 
c=[0.70,0.30,0.10]; 
X=[a;b;c]; 
hbar = bar(X, 'grouped'); 
    for i=1:length(hbar) 
      XDATA=get(hbar(i),'XData')'; 
      YDATA=get(hbar(i),'YData')'; 
      labels = cellstr(num2str(YDATA)); 
      ygap=0.01; 
      for j=1:size(XDATA,2) 
       xpos=XDATA(i,1); 
       ypos=YDATA(i,1)+ygap; 
       t=[num2str(YDATA(1,j),3)];text(xpos,ypos,t,'Color','k','HorizontalAlignment','left','Rotation',90) 
      end 
    end 
+0

あなたはX ' 'で(いくつかの例のデータを含めるようにあなたの質問を編集できます)。そうすればコードを実行できますか? [mcve] – Justin

+0

コードを変更して、データ@ Mr.Justinを追加しました。ありがとう – hamideh

答えて

1

は、あなたのコード内の二つの主要なエラーがあります:

  • 内部ループの定義:size(XDATA,2)1あるので、XDATA(N x 1)配列であるがゆえ、内側のループは、一つだけの繰り返しになります。その後、あなたはtext機能(t = text(xpos,ypos,labels{i});の出力と同じ変数を使用する;そして、あなたがいることを使用これはあなたのラベルは、あなたが最初のラベルとして変数tt=[num2str(YDATA(1,j),3)];を設定innserループ内の各グループ
  • のセンターバーに追加可能textへの別の呼び出しでは、変数が、今、それはラベルへのハンドルと、もはやラベル文字列が含まれていない。これは、エラーを生成します。

適切あなたはXを識別するためにコードを変更する必要がラベルを追加するにはラベルの位置

各バーの位置をグループ内の各バーの位置に戻します。各バーの位置は、XDATAの値とグループの中心を基準としたオフセットによって与えられます。オフセット値は、バーのXOffsetプロパティに格納されています(注意:これはhidden/undocumented propertyです)。

これが可能な実装である。このことができます

% Generate some data 
bar_data=rand(4,4) 
% Get the max value of data (used ot det the YLIM) 
mx=max(bar_data(:)) 
% Draw the grouped bars 
hbar=bar(bar_data) 
% Set the axes YLIM (increaed wrt the max data value to have room for the 
% label 
ylim([0 mx*1.2]) 
grid minor 
% Get the XDATA 
XDATA=get(hbar(1),'XData')'; 
% Define the vertical offset of the labels 
ygap=mx*0.1; 
% Loop over the bar's group 
for i=1:length(hbar) 
    % Get the YDATA of the i-th bar in each group 
    YDATA=get(hbar(i),'YData')'; 
    % Loop over the groups 
    for j=1:length(XDATA) 
     % Get the XPOS of the j-th bar 
     xpos=XDATA(j); 
     % Get the height of the bar and increment it with the offset 
     ypos=YDATA(j)+ygap; 
     % Define the labels 
     labels=[num2str(YDATA(j),3)]; 
     % Add the labels 
     t = text(xpos+hbar(i).XOffset,ypos,labels,'Color','k','HorizontalAlignment','center','Rotation',90) 
    end 
end 

​​3210

希望、

Qapla」

+0

完璧:)それは非常にうまくいった、神はあなたを祝福します:) – hamideh

+0

あなたは大歓迎です。私はあなたに慣れてきました。 –

関連する問題