Matlab 在标准差线之间绘制不同的阴影

Matlab plotting different shadings between lines of standard deviations

我在一篇文章中使用的图表有问题。 在网上找了很多,还是没有找到解决办法,所以我尽量把我的问题描述清楚:

我正在绘制两个参数,并用填充函数添加了它们的标准差。因为我不想使用颜色,所以我想对标准差之间的 space 使用不同的底纹。 到目前为止,我遇到的问题是,我无法指定,正如您在图片中看到的那样,阴影在一个参数的标准偏差之间是一致的。我想要的是虚线之间的一种阴影和实线之间的另一种阴影。

z = linspace(1,101,101)';

f=figure;
set(f,'Units', 'normalized', 'outerposition', [0 0 1 1]);

fill( [z' fliplr(z')],  [Parameter1_plus_std' fliplr(Parameter1_minus_std')], 'k');
alpha(0.4);
hold on
plot(normal,Parameter1_mean,'k','LineWidth',2);

fill( [z' fliplr(z')],  [Parameter2_plus_std' fliplr(Parameter2_minus_std')], 'k--');
alpha(0.2);
hold on
plot(Parameter2_mean,'k--','LineWidth',2);

图中可以看到虚线和实线之间较深的阴影,应该在虚线之间!

如果对此有任何想法,我将不胜感激!

这是因为您使用了透明度。你不能用透明度达到你想要的效果,你必须使用纯色。

例如:

figure('Units', 'normalized', 'outerposition', [0 0 1 1]);
hold on

fill( [z' fliplr(z')],  [Parameter1_plus_std' fliplr(Parameter1_minus_std')], 0.4*[1 1 1], 'Linestyle', '-');
plot(normal,Parameter1_mean,'k-','LineWidth',2);

fill( [z' fliplr(z')],  [Parameter2_plus_std' fliplr(Parameter2_minus_std')], 0.2*[1 1 1], 'Linestyle', '--');
plot(Parameter2_mean,'k--','LineWidth',2);

请注意,我无法在此处执行该代码,因为我没有数据,这是盲目拍摄,可能包含需要更正的小错误。

最佳,

我假设您使用 alpha 使绘图的所有线条都可见。问题是,添加了两个 half-transparent 填充物,因此它们重叠的地方颜色更深。因此,您不能使用 alpha 来实现您想要实现的目标。但是使用 fill 的第三个参数,您可以指定填充的纯色。要使用不同的灰色阴影,请使用 RGB-definition 和 three-element-vector,例如 [0.5 0.5 0.5]

现在您可以使用 'LineStyle','none''EdgeColor','none' 生成两种无边框的不同灰色阴影的填充。在把所有的线都画在上面之后。

代码如下:

z = linspace(1,101,101)';

% generate some data to plot
normal = z;
Parameter1_mean = 9.225e-06.*z.^3-0.00159.*z.^2+0.07392.*z-0.4292;
Parameter1_plus_std = Parameter1_mean+0.08;
Parameter1_minus_std = Parameter1_mean-0.11;
Parameter2_mean = 9.225e-06.*z.^3-0.00156.*z.^2+0.07332.*z-0.4232;
Parameter2_plus_std = Parameter2_mean+0.11;
Parameter2_minus_std = Parameter2_mean-0.08;

% create figure
figure('Units', 'normalized', 'outerposition', [0 0 1 1]);
hold on

% plot the two solid fillings without border
fill([z',fliplr(z')], [Parameter1_plus_std',fliplr(Parameter1_minus_std')], 0.8*[1 1 1], 'EdgeColor','none');
fill([z',fliplr(z')], [Parameter2_plus_std',fliplr(Parameter2_minus_std')], 0.6*[1 1 1], 'EdgeColor','none');

% plot all the lines
plot(normal,Parameter1_mean,'k-','LineWidth',2);
plot(Parameter1_plus_std,'k-')
plot(Parameter1_minus_std,'k-')
plot(Parameter2_mean,'k--','LineWidth',2);
plot(Parameter2_plus_std,'k--')
plot(Parameter2_minus_std,'k--')

% some tweaking
xlim([min(z),max(z)])

这是结果: