gpt4 book ai didi

matlab - Matlab 中的阴影图

转载 作者:行者123 更新时间:2023-12-03 16:01:28 24 4
gpt4 key购买 nike

我想在 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中间用黑色实线表示,如下图所示。
enter image description here
我现在希望当我们接近置信区间的下限(或上限)时,阴影区域会降低其颜色。特别是,当接近它的边界时,我希望阴影区域变得越来越亮。有没有办法做到这一点?
我正在做两个单独的补丁,因为我认为这可能是我的目的所必需的。

最佳答案

您可以将 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]);
其中产生:
enter image description here
子区域重叠并产生最大的facealpha n*(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;

关于matlab - Matlab 中的阴影图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64330701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com