Как вставить две оси X в Matlab участок
Я хотел бы создать фигуру Matlab с двойной осью X (m/s и km/h) с тем же сюжетом.
Я нашел plotyy и - в Matlab reposity - plotyyy, но я ищу:
- Двойная ось X.
- Вместе ниже сюжета.
Мой код очень прост:
stem(M(:, 1) .* 3.6, M(:, 3));
grid on
xlabel('Speed (km/h)');
ylabel('Samples');
M(:, 1)
- это скорость (в м/с), а M(:, 3)
- данные.
Мне нужна только вторая строка, внизу, со скоростями в м/с.
Ответы
Ответ 1
Вы можете сделать что-то вроде следующего. По сравнению с решением @Benoit_11 я использую обычные метрики Matlab и ссылаюсь на обе оси с помощью дескрипторов, поэтому назначение явно.
![Example Plot]()
Следующий код создает пустую ось x b
с единицами м/с с незначительной высотой. После этого фактический график рисуется во второй оси a
, расположенной немного выше других осей и с единицами км/ч. Чтобы построить на определенных осях, вставьте ось-дескриптор в качестве первого аргумента 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');
Ответ 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 для каждого устройства, например, в разных цветах.
Ответ 3
Лучший способ, которым я могу это сделать, - использовать 2 сюжета, например, вы можете разделить сюжет на большой и маленький раздел, сделав что-то вроде этого:
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
Это непроверено, вам может понадобиться немного поиграть, но он, надеюсь, поставит вас на правильный путь.