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

时间:2015-07-11 17:16:40

标签: matlab plot std

我对用于文章的情节有疑问。 在网上进行了大量搜索之后,我仍然没有找到解决方案,所以我会尝试尽可能清楚地描述我的问题:

我正在绘制两个参数,并使用fill-function添加了它们的标准偏差。因为我不想使用颜色,所以我想对标准偏差之间的空间使用不同的阴影。 到目前为止我遇到的问题是,我无法指定,阴影在一个参数的标准偏差之间是一致的,如图所示。我希望在虚线和实线之间的另一种阴影之间有一种阴影。

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

enter image description here

在图片中,您可以看到较暗的阴影位于虚线和实线之间,它应该位于虚线之间!

我会对此有任何想法感激不尽!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

请注意,我无法在此执行该代码,因为我没有数据,这是一个盲目的镜头,可能包含很少的错误需要纠正。

最佳,

相关问题