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

3
我在写一篇文章时遇到画图问题。我在网上搜索了很多,但还是找不到解决方案,因此我会尽可能清晰地描述我的问题: 我正在绘制两个参数,并使用填充函数添加它们的标准差。由于我不想使用颜色,所以我想在标准偏差之间使用不同的阴影。目前的问题是,我无法指定一个参数的标准差之间阴影的一致性,正如您在图片中所看到的。我希望在虚线之间有一种类型的阴影,在实线之间有另一种类型的阴影。
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);

这里输入图片描述

从图片中可以看出,更暗的阴影应该在虚线和实线之间,而不是在虚线之间!

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


2个回答

1
我假设您使用了alpha来使绘图的所有线条可见。问题是,两个半透明的填充会相互叠加,因此它们重叠的地方会更暗。所以您不能使用alpha来实现想要达到的效果。但是,通过fill的第三个参数,您可以指定填充的实心颜色。要使用不同的灰度级别,请使用RGB定义并使用三元素向量,例如[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)])

这是结果:

result


0

这是因为您使用了透明度。您无法通过透明度实现所需的效果,必须使用纯色。

例如:

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);

请注意,由于我没有数据,无法在这里执行该代码。这只是一次尝试,可能包含小错误需要纠正。
最好的祝福,

使用这个,我只能看到一个标准,而另一个被隐藏在它后面。但是透明颜色的使用是问题所在,这是一个很好的提示 :) - Thomas Dupré

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接