2016-05-20 4 views
1

を設定するとき、私は絵を描くための次のコードを持っている:基本的に、私はのプロットを作成関数copyobj伝説とfacealpha問題ログYSCALE

function addLineToFig(name, ccol, fighandle, variab, x)%, flippo, depthi) 

cd(['E:\SIMULATIONS\',name,'\COMPARED\ensamble']); 
load([name,'_ensamble'], variab); 


[n_BVn, xout_BVn] = histc(histazza(log10(sqrt(-BVsurf_Num_ens))), x); %%new data 

figure(fighandle) 

[LEGHbv,OBJHbv,OUTHbv,OUTMbv] = legend; 
P=plot(x,n_BVn/sum(n_BVn),'color',ccol,'linewidth',2); %%plot new data 
legend([OUTHbv;P],OUTMbv{:},name) %%update legend 

end 

%scamp data 
[flipedBV, flipeddepth] = flipit(depthi, BVsurf_int_ens); 

i=linspace(0,5,100); 
edges_eps=10.^(-i); 
logedg_BV= log10(fliplr(edges_eps)); 

[n_BV,xout_BV] = histc(histazza(log10(flipedBV)), logedg_BV); 

x = logedg_BV; 

%model data 
[n_BVn,xout_BVn] = histc(histazza(log10(sqrt(-BVsurf_Num_ens))), logedg_BV); 

BVsurfF = figure;hold on 
h=area(x,n_BV/sum(n_BV),'facecolor',[1 0 0]); %%red area where the problem gonna be 

legend('SCAMP') 
xlabel('$$ N~[1/s]$$','Interpreter','latex','fontsize',18) 
set(gca,'fontsize',14,'ygrid','on') 
alpha(.5) %%translucency of the red area 

%%add new data 
addLineToFig('KEPflu', [0 0 1], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('KEPflu2', [0 1 1], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('GASflu', [0 0 0], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('GASflu2', [1 0 1 ], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('EPSmin', [1 1 0], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('GASmin', [.5 .5 0], BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

addLineToFig('canuto', [.5 .5 .5]', BVsurfF, 'BVsurf_Num_ens', logedg_BV); 

サブルーチンaddLineToFigはで構成されてい赤色の領域を選択し、addLineToFigのデータを追加して正しく取得します。

enter image description here

あなたが赤の分布の半透明性を見ることができるように

h1=gcf; 
h2=figure; 
objects=allchild(h1); 
copyobj(get(h1,'children'),h2); 
set(gca,'yscale','log') 

enter image description here

が複製されていないとの伝説は、いくつかの問題を抱えている:私は数字を複製しようとすると、

問題が発生します。

問題はログにyscaleを設定した最後の行のようです。私がコメントすれば、コードは正常に動作します。誰かが回避策を知っていますか?

私は「OpenGLの」にオリジナルフィギュアのレンダラを設定することで、問題を解決し

i=linspace(0,5,100); 
edges_eps=10.^(-i); 
logedg_BV= log10(fliplr(edges_eps)); 

a = 1e-5; 
b = 1e-2; 
r = (b-a).*rand(1000,1) + a; 


[n_BV,xout_BV] = histc(histazza(log10(r)), logedg_BV); 

x = logedg_BV; 

%model data 
r2 = (b-a).*rand(1000,1) + a; 
[n_BVn,xout_BVn] = histc(histazza(log10(r2)), logedg_BV); 

BVsurfF = figure;hold on 
h=area(x,n_BV/sum(n_BV),'facecolor',[1 0 0]); %%red area where the problem gonna be 

legend('SCAMP') 
xlabel('$$ N~[1/s]$$','Interpreter','latex','fontsize',18) 
set(gca,'fontsize',14,'ygrid','on') 
alpha(.5) %%translucency of the red area 

%%add new data 
r3 = (b-a).*randn(1000,1) + a; 
[n_BVn,xout_BVn] = histc(histazza(log10(r3)), logedg_BV); 

figure(BVsurfF) 
[LEGHbv,OBJHbv,OUTHbv,OUTMbv] = legend; 
P=plot(x,n_BVn/sum(n_BVn),'color','k','linewidth',2); 
legend([OUTHbv;P],OUTMbv{:},'data2') 

%%add new data 
r4 = (b-a).*rand(1000,1) + a; 
[n_BVn,xout_BVn] = histc(histazza(log10(r4)), logedg_BV); 

figure(BVsurfF) 
[LEGHbv,OBJHbv,OUTHbv,OUTMbv] = legend; 
P=plot(x,n_BVn/sum(n_BVn),'color','y','linewidth',2); 
legend([OUTHbv;P],OUTMbv{:},'data3') 




h1=gcf; 
h2=figure; 
objects=allchild(h1); 
copyobj(get(h1,'children'),h2); 
+0

'。代わりに 'patch'を使ってみてください。それは私の問題を解決しました。 – JCKaz

+0

どのMATLABバージョンをお使いですか?入力を推測せずに実行した最小限の再現可能なコマンドセットにコードを展開できますか? –

+0

@ nirvana-msu悪いです。最小限の再現可能なコマンドセットを作ろうと思っています。問題は、それ以降、 '' set(gca、 'yscale'、 'log')を実行するときです。 – shamalaia

答えて

0

最小限のコード: `エリアを使用しているとき、私はFaceAlphaといくつかの同様の問題があった

set(BVsurfF,'renderer','OpenGL')