2017-06-07 4 views
1

データテーブルtbがあり、棒グラフに変えたいと思います。リストされたデータのテーブルからx-ラベルと凡例を使って棒グラフを作成する方法

N   X  P 
________ ______ ______ 

0   5  15.314 
0   10  36.288 
0   13  7.1785 
1   5  18.182 
1   10  40.997 
1   13  8.9741 
2   5  17.65 
2   10  40.095 
2   13  9.276 

棒グラフをこのように見せたいが、テーブルを並べ替える必要はありません。これを行う最も簡単な方法は何ですか?

pic1

現在のところ、それを行うには、私のコードは次のように見えますが、私はそれを操作する簡単な方法があるはず期待:

y = [tb.P(tb.X==5)' ; tb.P(tb.X==10)' ; tb.P(tb.X==13)']; 
b = bar(y); 
xlab = arrayfun(@num2str, Xlist, 'uniformoutput', false); 
set(gca,'xticklabel',xlab); 
leg = arrayfun(@num2str, Nlist, 'uniformoutput', false);; 
legend(b,leg) 

これを行うための適切な方法でしょうか?

答えて

1

あなたがuniqueaccumarrayで少し楽にこれを行うことができます。

[nValues, ~, nIndex] = unique(tb.N); 
[xValues, ~, xIndex] = unique(tb.X); 
bar(accumarray([xIndex nIndex], tb.P)); 
set(gca, 'XTickLabel', xValues); 
legend(int2str(nValues)); 
+0

ありがとうございました。これはそれを行う良い方法のように見えます。さて、図(1)、図(2)などのように、複数のプロットを作成するときに次の図を参照する方法を把握する最も堅牢な方法は何ですか? count = count + 1は超ロバストではない)。 – teepee

+0

@teepee:ベストプラクティスは、図形や任意のグラフィックスオブジェクトにハンドルをキャプチャし、軸にプロットを追加するなど、後続の操作のターゲットとしてそれらを使用することです。例: 'hFigure = figure(); hAxes =軸(hFigure); hPlot =プロット(hAxes、...); ' – gnovice

1

、それはあなたのためのよりシンプルだ場合、私は知らないが、あなたもこれを行うことができます:

dat = sortrows(tb,[2 1]); 
y = reshape(dat.P,numel(unique(dat.X)),[]).'; 
b = bar(y); 
set(gca,'xticklabel',unique(dat.X)); 
legend(b,num2str(unique(dat.N))) 

をそして、あなたはMatlabの2017aを持っている場合は、また、x軸を設定し、カテゴリデータとthis exampleを使用することができます値をbarに呼び出します。

関連する問題