web-dev-qa-db-ja.com

同じx軸を持つ2つのy軸

重複の可能性:
つのy軸を使用して1つのプロットに4つの曲線をプロット

ここMatlabに例として次のデータセットがあると仮定します。

x = linspace(0, 9, 10);
y1=arrayfun(@(x) x^2,x);
y2=arrayfun(@(x) 2*x^2,x);
y3=arrayfun(@(x) x^4,x);

したがって、それらが同じx軸を持っていることがわかります。今、私は次のプロットが必要です:

制限が0から9(これらの制限もティックである必要があります)でNティック(自分でNを定義できるようにしたい)の1つのx軸。したがって、0と9自体はすでにティックであるため、間にN-2ティックがあります。 y1とy2が同じy軸を参照するようにします。これは、左側に0とmax([y1、y2])の目盛りが表示され、その間にさらにM個の目盛りがあります。右側に別の軸が必要な場合よりも、y3は...

y1、y2、y3は、同じ凡例ボックスにエントリがあるはずです...これまでのところありがとう!

編集:arghはちょうどこれを見つけました: つのy軸で1つのプロットに4つの曲線をプロットする おそらく私はそれを自分で作ることができます...私は今すぐ試してみます!

編集:対数x軸を使用する場合はどうなりますか?!

7
tim

複数のX軸とY軸の使用 に関するこのドキュメントを参照してください。このような何かがトリックを行う必要があります:

_figure
ax1 = gca;
hold on
plot(x,y1)
plot(x,y2)
ax2 = axes('Position',get(ax1,'Position'),...
       'XAxisLocation','top',...
       'YAxisLocation','right',...
       'Color','none',...
       'XColor','k','YColor','k');
linkaxes([ax1 ax2],'x');
hold on
plot(x,y3,'Parent',ax2);
_

編集:おっと、保留コマンドを逃しました。今動作するはずです。また、上部の2番目のx軸を削除するには、axesコマンドに_'XTickLabel',[]_を追加するだけです。

余談ですが、y1=arrayfun(@(x) x^2,x);arrayfunを使用するべきではありません。代わりに、_.^_演算子:_y1=x.^2;_を使用してください。それははるかに優れたスタイルであり、はるかに高速です。

12
Matt B.