【问题标题】:Matlab bar3 plotMatlab bar3绘图
【发布时间】:2014-11-12 16:33:28
【问题描述】:

我对 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) = 3Angles(1,1) = 37° 处测量。

【问题讨论】:

  • 那么图表应该是什么?两个条在 x=37 处沿 y 轴堆叠,一个在 34 处等?
  • 对不起,我误会了!你是对的! mathworks.com/matlabcentral/fileexchange/screenshots/2842/… 在 x 轴上,有角度。在 y 轴上是测量的 ID。在 z 轴上,绘制了值本身。因此,在我的示例中,x 轴的范围为 34° 到 39°,y 轴的范围为 1 到 3,以及根据九个值的 9 个条形。
  • 所以每个 x 值的柱数可以变化,对吧? x=34 的一根柱线,x=37 的两根柱线,等等

标签: matlab graph plot matlab-figure


【解决方案1】:

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

警告:NaNs 通常被绘图命令忽略,但bar3 显然违反了这个约定。它似乎用零替换了NaNs!因此,在缺失值时,您将得到一个高度为零的条形(而不是根本没有条形)

[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 为例,这给出了:

【讨论】:

  • 有问题。 NaNs 不会被 bar3 忽略!他们给 0 代替。见编辑
  • 这不是问题 atm,因为 0 的值无法测量。所以很明显,这些值并不代表有用的东西
  • 如果有问题(在更一般的设置中),this approach 可能会被调整以删除这些条
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 2015-07-02
  • 2011-01-04
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多