ejemplo - Cómo insertar dos ejes X en un diagrama de Matlab
title matlab (3)
Me gustaría crear una figura de Matlab con un doble eje X (m / s y km / h) con la misma gráfica.
He encontrado una trama y, en Matlab reposity, tramay, pero estoy buscando:
- Un doble eje X.
- Juntos debajo de la trama.
Mi código es muy simple:
stem(M(:, 1) .* 3.6, M(:, 3));
grid on
xlabel(''Speed (km/h)'');
ylabel(''Samples'');
M(:, 1)
es la velocidad (en m / s), y M(:, 3)
son los datos.
Solo me gustaría una segunda línea, en la parte inferior, con las velocidades en m / s.
Como alternativa muy simple, también podría crear un 2 ° eje (transparente) y colocarlo debajo del primero para que solo vea el eje x.
Ejemplo:
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'')
Salida:
Luego puede agregar manualmente las etiquetas x para cada unidad, en diferentes colores, por ejemplo.
Lo mejor que puedo hacer es usar 2 trazados, por ejemplo, puedes dividir la trama en una sección grande y pequeña haciendo algo como esto:
subplot(100, 1, 1:99) // plot your graph as you normally would
plot(...
subplot(100, 1, 100) // Plot a really small plot to get the axis
plot(...)
b = axis()
axis([b(1:2), 0, 0]) // set the y axis to really small
Esto no se ha probado, es posible que tenga que juguetear un poco, pero con suerte debería ponerlo en el camino correcto.
Puedes hacer algo como lo siguiente. En comparación con la solución de @ Benoit_11 , utilizo las etiquetas normales de Matlab y me refiero a ambos ejes con asas para que las asignaciones sean explícitas.
El siguiente código crea un eje x b
vacío con las unidades m / s con una altura despreciable. Después de esto, la trama real se dibuja en un segundo eje ubicado un poco por encima de los otros ejes y con unidades km / h . Para trazar sobre un eje específico, inserte el mango de los ejes como primer argumento de stem
. La conversión de m / s a km / h se escribe directamente en el llamado a stem
. Finalmente, es necesario establecer la xlim
xlim de ambos ejes con los mismos valores.
% 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'');