2015-07-11 237 views
3

我有一個問題,我用於一篇文章的情節。 經過大量的網絡搜索後,我仍然沒有找到解決方案,所以我會盡可能清楚地描述我的問題:Matlab繪製不同陰影線之間的標準偏差

我繪製了兩個參數,並添加了它們的標準偏差填充函數。因爲我不想使用顏色,所以我想在標準偏差之間使用不同的陰影。 直到現在我遇到的問題是,我無法指定,如圖片中所示,陰影在一個參數的標準偏差之間是一致的。我希望在虛線和實線之間的另一種陰影之間有一種陰影。

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

在圖片中,可以看到深色陰影是寵愛和實線,它應該是點線之間!

我會感謝你對此的任何想法!

+0

可能重複,兩組數據,線之間的區域填充在一個圖中](http://stackoverflow.com/questions/6245626/matlab-filling-in-the-area-between-two-sets-of-data-lines-in-one-figure) –

回答

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

這是結果是:[MATLAB

result

+0

非常感謝,這完美的作品! –

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

注意,因爲我沒有數據,我不能在這裏執行的代碼,這是一種盲目的出手,它可能包含一些小錯誤糾正。

最佳,

+0

使用這個,我合作只看到一個標準,而另一個隱藏在它後面。但是,使用透明的顏色是問題,是一個很好的提示:) –