每种类型的聚合
您可以使用accumarray找到每种岩石类型的总厚度:
total_type_thickness = accumarray(A(:,1),A(:,2));
它将第二列的所有值与第一列中相同的数字相加。因此,对于您的示例数据,这将返回:
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
图例中的第一个元素将对应于 Rock 类型 1,2,.. M:
legend(arrayfun(@(ii) sprintf('Rock type %d',ii), 1:length(total_type_thickness), 'uni',false));