Построить два сигнала с различными осями и пределами в Matlab
Давайте рассмотрим, я строю два сигнала вместе на одном графике, который имеет разные пределы, и поэтому я хочу разные оси
plot(a)
axis ([-2 10 -2 8])
hold 'on'
plot(b)
axis ([-1 4 -4 7])
hold 'off'
где "a" и "b" - два сигнальных выражения. проблема здесь в том, что сигналы получают график, но работает только вторая ось, а график a не ограничивается первой указанной осью. причина в том, что вторая ось, очевидно, перезаписывает первые оси, но есть идея, как построить оба сигнала с ограничениями обеих осей?
4 ответа
Вы можете выбрать данные, которые вы хотите построить, используя логические операторы.
Давайте рассмотрим случай для сюжета a
,
Назначьте каждый столбец bs
к переменной:
x1 = bs(:,1)
y1 = bs(:,2)
Затем выберите только те значения, которые соответствуют указанному условию:
xPlot = x1(x1 > -2 & x1 < 10)
yPlot = y1(y1 > -2 & y1 < 8)
Предполагая, что они оба содержат одинаковое количество элементов, вы можете затем построить их.
Если нет, вам нужно заполнить меньший массив Nan
Например, чтобы избежать ошибки при несовпадении размеров.
Как только вы узнаете, какой массив меньше, вы можете сделать это следующим образом. Скажем в этом случае xPlot
меньше чем yPlot
:
m = max(numel(xPlot),numel(yPlot)) %// Just getting the larger dimension
xPlot(numel(xPlot)+1:m) = NaN
Теперь вы можете позвонить
plot(xPlot,yPlot,'b-','LineWidth',2)
и это должно работать. То же самое относится и к b
сюжет.
Надеюсь, это поможет!
Если то, что вы ищете, является чем-то вроде plotyy
но в другом направлении посмотрите на функцию plotxx от matlabcentral, которая делает то же самое в направлении x.
Возможно, вам придется настроить его, чтобы он делал все, что вам нужно, но это даст вам хорошую отправную точку.
Возможно, вы захотите взглянуть на plotyy, чтобы получить 2 разных оси Y.
Если на ваших графиках нет ничего общего, возможно, вам следует расположить их на двух разных осях, например
figure('Name', 'Example');
subplot(121);plot(rand(3));
subplot(122);plot(rand(3));
ОБНОВИТЬ
Если вам абсолютно необходимы две оси, вы можете попробовать что-то вроде этого
figure('Name', 'plotyy');
h = plotyy([0 1 2 4], 0:4, [4 5], [2 1]);
linkaxes(h, 'off');
axis(h(1), [0 4 0 4]);
axis(h(2), [4 5 1 2]);
Ты можешь использовать plotyy
который создаст 2 оси Y с различными масштабами и пределами.