我对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°
。
答案 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')
使用您的示例Values
和Angles
,这会给出: