2

我正在尝试制作一个堆积条形图,该图应该显示不同类型的岩石如何随深度变化。我根据一些真实数据生成了一些虚构的岩性系列,并希望以一种可读的方式呈现它们。所以现在我有这个矩阵A

A =

2.0000   65.0000
1.0000   19.5000
2.0000    0.5000
4.0000    1.5000
2.0000   58.0000
4.0000    2.0000
2.0000   22.5000
3.0000    7.0000
2.0000   14.5000
3.0000   12.5000
4.0000    2.5000
2.0000   31.5000
1.0000   20.0000
2.0000   20.0000
1.0000   15.5000
2.0000   66.0000
4.0000    0.5000
2.0000    2.5000
3.0000    8.0000
2.0000   61.0000
1.0000   17.5000
2.0000    8.0000
5.0000   19.5000
3.0000   24.5000

其中第一列代表不同的岩石类型,第二列代表每个岩性层的厚度(以米为单位)。现在我想把它绘制成一个核心数据日志。所以从 1 到 5 的每种岩石类型都应该有一种特定的颜色,每个颜色条的粗细应该代表该岩石类型的厚度。我怎样才能做到这一点?

4

1 回答 1

2

每种类型的聚合

您可以使用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));

在此处输入图像描述

于 2012-09-24T09:39:10.340 回答