web-dev-qa-db-fra.com

Comment insérer deux axes X dans un Matlab un tracé

Je voudrais créer une figure Matlab avec un double axe X (m/s et km/h) avec le même tracé.

J'ai trouvé plotyy et - dans Matlab reposity - plotyyy, mais je recherche:

  1. Un double axe X.
  2. Ensemble sous l'intrigue.

Mon code est très simple:

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

grid on

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

M(:, 1) est la vitesse (en m/s) et M(:, 3) est les données.

Je voudrais seulement une deuxième ligne, en bas, avec les vitesses en m/s.

12

Vous pouvez faire quelque chose comme ceci. Par rapport à la solution de @ Benoit_11 J'utilise les étiquettes Matlab normales et je fais référence aux deux axes avec des poignées afin que les affectations soient explicites.

Example Plot

Le code suivant crée un axe x vide b avec les unités m/s avec une hauteur négligeable. Après cela, le tracé réel est dessiné dans un deuxième axe a situé un peu au-dessus des autres axes et avec des unités km/h. Pour tracer sur des axes spécifiques, insérez la poignée des axes comme premier argument de stem. La conversion de m/s à km/h est directement écrite dans l'appel à stem. Enfin, il est nécessaire de définir la propriété xlim- des deux axes sur les mêmes valeurs.

% 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

Comme alternative très simple, vous pouvez également créer un 2ème axe (transparent) et le placer en dessous du premier afin que vous ne voyiez que l'axe x.

Exemple:

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')

Production:

enter image description here

Ensuite, vous pouvez ajouter manuellement les étiquettes x pour chaque unité, de couleur différente par exemple.

9
Benoit_11