2016-05-18 3 views
0

IコードこれをMATLABでどのようにプロットするのですか?私は胆嚢= -22の閾値ラインのようにAプロットしたい

xr=randi([1 150],1,20) 
    z=numel(xr); 
    N=10; %Window length 
    gAll=zeros(1,z-N+1); 
    for n=0:z-N; 
     x=xr(1+n:N+n) 
     d=max(x); 
     m=numel(x); 
     y=zeros(d,1); 
     p=zeros(d,d); 
     for k=1:m-1 
     y(x(k))=y(x(k))+1; 
     p(x(k),x(k+1))=p(x(k),x(k+1))+1; 
     end 
     p=bsxfun(@rdivide,p,y); 
     p(isnan(p)) = 0; 
     j=prod(p(p~=0)); 
     [~,~,idx] = unique(x); 
     q=prod(hist(idx,1:max(idx))/numel(x)); 
     s=log(j); 
     l=log(q); 
     g=s+l 
    gAll(n+1)=g; 
    end 
    plot(gAll) 

を以下た、閾値ライン上のグラフは、閾値線の下赤色グラフであるべきである青色べきであるが、グラフがすべきこれらの2つの異なる色との連続継ぎ目で、どのように行うか。

+0

の代わりに 'Y(X(K))= Y(Xを(k))+ 1'を呼び出し、 'tabulate(x)'を(ループの前に)呼び出し、2番目の列を取ります。 – EBH

答えて

0

NaNに値を設定することによって、グラフの領域をマスクすることができます。データgAllの高解像度補間を作成し、gAll>-22をマスクし、gAll<-22をマスクしたものを2つ作成し、それらを同じ軸にプロットします。

あなたは、論理インデックスを使用してNaNで値を置き換え、interp1(x, gAll, x_HR)x_HRgAll_HRあなたのベクトルgAllの高解像度版を作ることができる:

gAll_low = gAll_HR; 
gAll_low(gAll_HR>=-22) = NaN; 
gAll_high = gAll_HR; 
gAll_high(gAll_HR<-22) = NaN; 

plot(x_HR, gAll_low, 'b-', x_HR, gAll_high, 'r-') 
+0

私は理解できません、私はそれを直接実行できるように全体のコードを投稿できますか? –

+0

@RamShivshankarちょっと書いてください: 'x_HR = 1:0.01:max(x);'( '0.01'ではなく、あなたが望む解像度を選んで、違いを見てみてください) ' gAll_HR = interp1(x、gAll 、x_HR); ' 上記のコードをコピーすると動作します。 例のような小さなベクトルを実行しないと、エラーが発生する可能性があります_グリッドベクトルは厳密には単調増加ではありません。 – EBH

関連する問題