Matlab bar3情节

时间:2014-09-18 11:01:43

标签: matlab graph plot matlab-figure

我对MATLAB bar3图有问题:这就是我所拥有的:


m x n 包含测量值的数组Values

另一个 m x n 数组Angles表示测量值的角度(例如,第三个值是以90°的角度测量的) 。每个测量值的角度值存储在另一个变量中。


我的x轴需要-180°到+ 180°的范围。仅此一点是没问题的。但是,我如何交出我的测量值?我必须以某种方式将它们链接到角度值。因此,Values中的每个值都以某种方式与Angles中的角度值相关联。对于我的y轴,我可以简单地从0计算到Values数组的行数。

实施例

Values看起来像:

3   5   6
2   1   7
5   8   2

Angles看起来像:

37°   38°   39°
36°   37°   38°
34°   35°   36°

Values(1,1) = 3的衡量标准为Angles(1,1) = 37°

1 个答案:

答案 0 :(得分:3)

在每个角度,条的数量取决于该角度存在多少测量值。 bar3需要矩阵输入。为了构建矩阵,缺失值用NaN填充。

警告:NaN通常会被绘图命令忽略,但bar3显然违反了这个惯例。它似乎用零替换NaN s!因此,在缺失值时,您将获得零高度条(而不是根本没有条)

[uAngles, ~, uAngleLabels] = unique(Angles); %// get unique values and
    %// corresponding labels
valuesPerAngle = accumarray(uAngleLabels(:), Values(:), [], @(v) {v});
    %// cell array where each cell contains all values corresponding to an angle
N = max(cellfun(@numel, valuesPerAngle));
valuesPerAngle = cellfun(@(c) {[c; NaN(N-numel(c),1)]}, valuesPerAngle);
    %// fill with NaNs to make all cells of equal lenght, so that they can be
    %// concatenated into a matrix  
valuesPerAngle = cat(2, valuesPerAngle{:}); %// matrix of values for each angle,
    %// filled with NaNs where needed
bar3(uAngles, valuesPerAngle.'); %'// finally, the matrix can be plotted
ylabel('Angles')
xlabel('Measurement')

使用您的示例ValuesAngles,这会给出:

enter image description here