2012-12-10 26 views
5

yの2つのベクトルとして与えられる関数fを描画したいので、y=f(x)です。 私はplot(x,y)を使用しますが、今、私はそれがこのように見えるので、それがもとで0以上の青と赤される必要があります:あなたは、MATLABのベクトル、NaNを充填されているそのベクトルの任意のセグメントをプロットするとMatlabの二色プロット

enter image description here

+0

があります。 uk/matlabcentral/fileexchange/30423-条件付きカラーラインプロット – KatyB

答えて

8

プロットされません。あなたの目標を達成するための1つのトリックは、Nansを使用して関連するセグメントを削除して元のものの上に2行目をプロットすることです。たとえば、この呼ばれる条件付き色のラインプロットhttp://www.mathworks.coのためのMathWorksファイル交換サイト上のスクリプトが

x = linspace(1,100,1000); 
y = sin(x); 

% Using a cutoff of y>=0.5 
belowCutoff  = y; 
belowCutoff(y>=0) = NaN; % Replace points above cutoff with NaNs; 

figure; 
plot(x,y,'r',x, belowCutoff, 'b'); 

enter image description here

1
y0 = 0; % threshold 
color1 = [1 0 0]; % below threshold 
color2 = [0 0 1]; % above threshold 
x = 1 : 10; 
y = randn(1, 10); 
threshold_plot(x, y, y0, color1, color2); 

function threshold_plot(x, y, y0, color1, color2) 
hold on; 
n = length(x); 
for i = 2 : n 
    x1 = x(i - 1); y1 = y(i - 1); 
    x2 = x(i); y2 = y(i); 
    ascending = y1 < y2; 
    if x1 == x2 
    if ascending 
     plot([x1 x2], [y1, y0], 'Color', color1); 
     plot([x1 x2], [y0, y2], 'Color', color2); 
    else 
     plot([x1 x2], [y1, y0], 'Color', color2); 
     plot([x1 x2], [y0, y2], 'Color', color1); 
    end; 
    elseif y1 == y2 
    if threshold <= y1 
     plot([x1 x2], [y1 y2], 'Color', color2); 
    else 
     plot([x1 x2], [y1 y2], 'Color', color1); 
    end; 
    else 
    a = (y2 - y1)/(x2 - x1); 
    b = y1 - a * x1; 
    x0 = (y0 - b)/a; 
    if x1 <= x0 && x0 <= x2 
     if ascending 
     plot([x1 x0], [y1, y0], 'Color', color1); 
     plot([x0 x2], [y0, y2], 'Color', color2); 
     else 
     plot([x1 x0], [y1, y0], 'Color', color2); 
     plot([x0 x2], [y0, y2], 'Color', color1); 
     end; 
    else 
     if y0 <= y1 
     plot([x1 x2], [y1 y2], 'Color', color2); 
     else 
     plot([x1 x2], [y1 y2], 'Color', color1); 
     end; 
    end; 
    end; 
end; 
関連する問題