为向 SO 提出非编程问题提前道歉,但权力已确定所有与 MATLAB 相关的问题都属于这里。
我一直在做一些卡尔曼滤波器并绘制状态变量估计值,以查看它们如何随时间收敛。现在,我想直观地表示协方差矩阵,它表示估计中的不确定性。所以我写了一个小函数,在估计值周围涂上颜色。
(编辑说明:以前的版本错误地使用2*cov
了每个半带的宽度,当它需要 2 个标准偏差时)
function [ls, regions] = plotuncertain( t, y, cov )
t = t(:);
y = y(:);
stdev = cov(:).^(1/2);
a = ones(size(t));
regions(1) = patch('XData', [t; t(end:-1:1)], ...
'YData', [y + 2*stdev; y(end:-1:1)], ...
'FaceVertexAlphaData', [0*a; a], ...
'FaceAlpha', 'interp', 'EdgeColor', 'none');
regions(2) = patch('XData', [t; t(end:-1:1)], ...
'YData', [y - 2*stdev; y(end:-1:1)], ...
'FaceVertexAlphaData', [0*a; a], ...
'FaceAlpha', 'interp', 'EdgeColor', 'none');
ls = line('XData', t, 'YData', y);
它看起来很合理:
但是我有两个具有相似含义的状态变量,我想在一个轴上同时绘制它们。
呃,哦,k_1 的初始数据被 k_2 波段的(上半部分)遮蔽了。MATLAB 没有按照我提交的顺序绘制线条和补丁。即使我设法控制了他们绘制的顺序,alpha 混合仍然不如基于概率混合颜色的最佳选择。
任何想法如何同时渲染两者?我可以以某种方式利用我为两个变量使用两个不同的颜色平面这一事实吗?