2017-10-05 17 views
1

私は、セミログラムの背景を2色で陰にする方法を探しています。
たとえば、次の画像では、3つの多項式をプロットしていますが、それらはすべてx = 1で等しくなります。私は1つの矩形x < 1つの領域と他のx> 1の領域です。これらの2つの領域をハイライト表示するには、どのようにバックグラウンドで色の異なる2つの矩形を挿入できますか?半製品(MATLAB)で複数色の背景を設定するにはどうすればいいですか?

MWE:

x = 0.1:0.1:10; 
    y1 = polyval([1, 0], x);  % Evaluate y = x; 
    y2 = polyval([1, 0, 0], x); % Evaluate y = x^2; 
    y3 = polyval([1, 0, 0, 0], x); % Evaluate y = x^3;  
    figure 
    semilogy(x, y1, '.k', x, y2, '.b', x, y3, '.r'); title ('Three 
    polynomials on a semilog y scale') xlabel('x'); ylabel('y'); 
    legend({'y= x', 'y = x^2', 'y = x^3'}, 'Location', 'Northwest') 

enter image description here

+0

これらの記事をチェックしてください:[MATLAB図の0と1の識別のための透過的な背景](https://stackoverflow.com/questions/46527808/transparent-background-for-identification-of-0-and-1- in-a-matlab-figure)と[Matlabプロットのハイライト部分](https://stackoverflow.com/questions/13734086/highlight-parts-of-matlab-plot) –

+0

@SardarUsama申し訳ありませんが、私は見る前に答えを入力しましたあなたのコメント。確かに私は解決するために同じ道をたどっていますが、私が検索したときには* logscale area *では何もありませんでした。 – Guto

答えて

1

あなたはareaまたはpatchを使用していることを解決することができます。 @SardarUsamaで指摘したように

othersquestionsはそれに良い例であるが、しかし、あなたはそれ以外の場合は失敗します、areaデータ内の任意のゼロを持ってないようにする必要があります。

コードを1つだけ設定します。

x = 0.1:0.1:10; 
y1 = polyval([1, 0], x);  % Evaluate y = x; 
y2 = polyval([1, 0, 0], x); % Evaluate y = x^2; 
y3 = polyval([1, 0, 0, 0], x); % Evaluate y = x^3;  
figure 
plot(x, y1, '.k', x, y2, '.b', x, y3, '.r'); %MODIFIED 
hold on %ADDED 
title ('Three polynomials on a semilog y scale') 
set (gca, 'Yscale', 'log'); %ADDED 
xlabel('x'); 
ylabel('y'); 
legend({'y= x', 'y = x^2', 'y = x^3'}, 'Location', 'Northwest') 

area([1 1 10 10],[1e-3 1e+3 1e+3 1e-3 ],'FaceColor','green','facealpha',0.3) %ADDED 

上記のコードは、2014b以降のmatlabで動作します。あなたがその前に1を持っている場合は、(データ内のいくつかの小さな変更が必要ですが、Facealphaオプションを使用しています)patch機能を使用することができるか、私は以下のそうであるように、あなたは、バックグラウンドにエリアを移動することができます。

ax=get(gca,'Children'); %ADDED 
set(gca,'Children',[ax(2) ax(3) ax(4) ax(1)]); %ADDED, move area to background 

を注:確かに、私は伝説の問題を逃しました。私は述べたように私は正しいが、他のグラフの上に領域があった。それを解決するために私はプロットの順序を変えました。エリアに透明性がある場合、これは問題ではありません。

+0

ありがとうございます。それは、凡例の最初の2つのエントリが行の代わりに矩形として表示されていることを除いて、動作するようです。 – NAASI

+0

@Gutoはプロットが終了した後、 'FaceAlpha'プロパティを使って' area'を使います。すなわち、 ([1,1,10,10]、[1e-3,1e + 3,1e + 3,1e-3]、 'FaceColor'、 'Green'、 'FaceAlpha'、0.3) ' –

+0

@ありがとう、私は2014bを使用しているので、 'facealpha'は動作しません。私は両方のソリューションを考慮して質問を編集しました。 – Guto

関連する問題