matlab - Matlab中的阴影图
问题描述
我想在 Matlab 中绘制一个带有阴影区域的函数,表示它的不确定性(例如,置信区间)。这可以通过使用fill
函数创建色块来实现。例如
x = linspace(0, 2*pi, 100);
f = cos(x);
fUp = cos(x) + 1;
fLow = cos(x) - 1;
x2 = [x, fliplr(x)];
plot(x, f, 'k')
hold on
fill(x2, [f, fliplr(fUp)], 0.7 * ones(1, 3), 'linestyle', 'none', 'facealpha', 0.4);
fill(x2, [fLow, fliplr(f)], 0.7 * ones(1, 3), 'linestyle', 'none', 'facealpha', 0.4);
fLow
这会在函数和之间创建一个灰色阴影区域fUp
,f
中间用黑色实线表示,如下图所示。
我现在想让阴影区域在我们接近置信区间的下限(分别是上限)时降低其颜色。特别是,我希望在接近其边界时,阴影区域变得越来越亮。有没有办法做到这一点?我正在做两个单独的补丁,因为我认为这对于我的目的可能是必要的。
解决方案
您可以将 CI 拆分为n
子区域:
x = linspace(0, 2*pi, 100);
f = cos(x);
n = 20; % step number
g = 0.3; % grayscale intensity
fUp = cos(x) + linspace(0,1,n).';
fLow = cos(x) - linspace(0,1,n).';
x2 = [x, fliplr(x)];
plot(x, f, 'k')
hold on
fill(x2, [repmat(f,n,1), fliplr(fUp)], g * ones(1, 3), 'linestyle', 'none', 'facealpha', [1/n]);
fill(x2, [fLow, repmat(fliplr(f),n,1)], g * ones(1, 3), 'linestyle', 'none', 'facealpha', [1/n]);
哪个产品:
子区域重叠并产生最大 facealphan*(1/n) * g = g
请注意,这种方法并不是真正有效的内存(因为它n
在每一侧产生子区域)并且仅适用于线性阴影。
如果您的 CI 是非线性的,那么您应该调整这部分:
% Prediction Linear CI
% ↓ ↓
cos(x) + linspace(0,1,n).';
cos(x) - linspace(0,1,n).';
到
% Prediction Non linear CI
% ↓ ↓
cos(x) + your_non_linear_CI_distribution;
cos(x) - your_non_linear_CI_distribution;
推荐阅读
- java - SSLHandshakeException:握手失败 SSL 例程:OPENSSL_internal:WRONG_VERSION_NUMBER
- python - plotly , 绘制烛台
有人尝试使用 plotly 在 python 上绘制每小时蜡烛吗?我正在尝试,但您基本上可以根据日期将所有烛台时间绘制在彼此之上。有没有办法在输入日期和时间的地方绘制几个小时以停止任何重叠?我在下面开始的代码
fivedaydata.tail() import plotly.graph_objects as go #creat
- git - 为什么我收到错误“致命:pathspec 'a.txt'不匹配任何文件”?
- angular - dtOptions createdRow、columnDefs 等未生效,因为可能稍后加载 ajax 数据
- visual-studio - 请求被中止:无法在 VS 2017 的开发人员命令提示符中创建 SSL/TLS 安全通道
- django - 如何在 DRF 中发布多个数据并使用 Axios 进行反应
- mysql - 用不同的外键连接多个表SQL
- c# - 您如何获得具有某些要求的角色?
- c# - 使用元胞自动机的现实/半现实热能传递算法?
- python - Python3 / subprocess.check_output / Timeout 不适用于每个命令