タイプごとの集計
accumarrayを使用して、各岩石タイプの合計厚さを見つけることができます。
total_type_thickness = accumarray(A(:,1),A(:,2));
2 番目の列のすべての値を合計し、1 番目の列と同じ数になります。したがって、サンプルデータの場合、これは次を返します。
total_type_thickness =
72.5000
349.5000
52.0000
6.5000
19.5000
難しいのは、積み上げられた単一のバーとして表示することです。次の回避策を試すことができます。
http://www.mathworks.com/matlabcentral/newsreader/view_thread/57304
これにより、空の列が残りますが、x 制限を設定することで非表示にすることができます。
bar([total_type_thickness'; zeros(size(total_type_thickness'))],'stacked');
xlim([0.25 1.75])
% add a legend with 'Rock Type <ii>'
legend(arrayfun(@(ii) sprintf('Rock type %d',ii), 1:length(total_type_thickness), 'uni',false));

ベクトルデータを入力した場合、matlab はバーをスタックせず、その場合はバーを個別にプロットするため、今のところ、より良い代替手段は見つかりませんでした..
すべての値を表示、タイプごとに同じ色
すべてのデータ (すべてのレイヤー) をプロットするには、同じアプローチを使用できますが、カラーマップを使用してカラー データを手動で設定するようになりました。
N = size(A,1); % number of layers
M = max(A(:,1)); % number of different rock types
bar([A(:,2)' ; NaN(1,N)],'stacked','facecolor','flat');
xlim([0.25 1.75])
cc = jet(M); % create colormap with N different colors
colormap(cc(A(:,1),:)); % pick for each layer, the correct color and use it as a colormap
凡例を簡単に追加するM
ために、元のデータにダミーの値を追加します。
bar([NaN(1,M) A(:,2)' ; NaN(1,N+M)],'stacked','facecolor','flat');
xlim([0.25 1.75])
cc = jet(M); % create colormap with N different colors
colormap(cc([(1:M)' ;A(:,1)],:)); % pick for each layer, the correct color and use it as a colormap
これで、凡例の最初のM
要素がロック タイプ 1、2、.. M に対応します。
legend(arrayfun(@(ii) sprintf('Rock type %d',ii), 1:length(total_type_thickness), 'uni',false));
