web-dev-qa-db-ja.com

Matlab Aプロットに2つのX軸を挿入する方法

同じプロットで2つのX軸(m/sおよびkm/h)を持つMatlabフィギュアを作成したいと思います。

PlotyyとMatlabリポジトリでplotyyyを見つけましたが、探しています:

  1. ダブルX軸。
  2. 一緒にプロットの下。

私のコードはとてもシンプルです:

_stem(M(:, 1) .* 3.6, M(:, 3));

grid on

xlabel('Speed (km/h)');
ylabel('Samples');
_

M(:, 1)は速度(m/s)であり、M(:, 3)はデータです。

一番下の2番目の行のみ、m/sの速度でお願いします。

12

次のようなことができます。 @ Benoit_11のソリューションと比較して、通常のMatlabラベルを使用し、両方の軸をハンドルで参照するため、割り当てが明示されます。

Example Plot

次のコードは、単位m/sが無視できる高さの空のx軸bを作成します。この後、実際のプロットは、他の軸の少し上にある2番目の軸aに描画され、単位はkm/hです。特定の軸にプロットするには、stemの最初の引数として軸ハンドルを挿入します。 m/sからkm/hへの変換は、stemへの呼び出しで直接書き込まれます。最後に、両方の軸のxlim-プロパティを同じ値に設定する必要があります。

% experimental data
M(:,1) = [ 0,  1,  2,  3,  4,  5];
M(:,3) = [12, 10, 15, 12, 11, 13];

% get bounds
xmaxa = max(M(:,1))*3.6;    % km/h
xmaxb = max(M(:,1));        % m/s


figure;

% axis for m/s
b=axes('Position',[.1 .1 .8 1e-12]);
set(b,'Units','normalized');
set(b,'Color','none');

% axis for km/h with stem-plot
a=axes('Position',[.1 .2 .8 .7]);
set(a,'Units','normalized');
stem(a,M(:,1).*3.6, M(:,3));

% set limits and labels
set(a,'xlim',[0 xmaxa]);
set(b,'xlim',[0 xmaxb]);
xlabel(a,'Speed (km/h)')
xlabel(b,'Speed (m/s)')
ylabel(a,'Samples');
title(a,'Double x-axis plot');
17
Matt

非常に単純な代替手段として、2番目の軸(透明)を作成し、最初の軸の下に配置して、x軸のみが見えるようにすることもできます。

例:

clear
clc
close all

x = 1:10;

x2 = x/3.6;

y = Rand(size(x));

hP1 = plot(x,y);

a1Pos = get(gca,'Position');

%// Place axis 2 below the 1st.
ax2 = axes('Position',[a1Pos(1) a1Pos(2)-.05 a1Pos(3) a1Pos(4)],'Color','none','YTick',[],'YTickLabel',[]);

%// Adjust limits
xlim([min(x2(:)) max(x2(:))])

text(2.85,0 ,'m/s','FontSize',14,'Color','r')
text(2.85,.05 ,'km/h','FontSize',14,'Color','r')

出力:

enter image description here

次に、各ユニットのxラベルを、たとえば異なる色で手動で追加できます。

9
Benoit_11