Октава: добавить вторичную ось y к существующему графику

Я использую портативный Octave 4.2.1 под Win 10.

У меня есть несколько графиков на одном графике с одной осью Y, каждый из которых создан с plot(...) предложение. Я хочу добавить график на вторичной оси Y к этому существующему графику, не создавая с самого начала две оси с plotyy, (РЕДАКТИРОВАТЬ) и возможность работать все то же самое, например, добавление легенды и т. Д.

Как правильно использовать это?

Если я выполню

plotyy(x, ysec) ;

или же

ax = gca ;
plotyy(ax, x, ysec) ;

я получил

error: Invalid call to plotyy.  Correct usage is:    
 -- plotyy (X1, Y1, X2, Y2)
 -- plotyy (..., FUN)
 -- plotyy (..., FUN1, FUN2)
 -- plotyy (HAX, ...)
 -- [AX, H1, H2] = plotyy (...)

Это показывает что-то похожее для Matlab, но я не уверен, что весь код, который работает со вторичной осью, будет создан с plotyy, будет работать с осью, созданной таким же образом.

1 ответ

Вот два варианта. Я тестировал их в MATLAB, но я уверен, что в Octave все будет работать так же.

Давайте начнем с обычных случайных данных:

% Initial graph
x1 = linspace(0,1,100);
y1 = randn(size(x1));
clf
plot(x1,y1,'k');

% New data
x2 = x1;
y2 = rand(size(x2));

Перепланируйте фигуру, добавив новые данные по второй оси

Здесь мы извлекаем данные с текущих осей (конечно, было бы лучше, если бы вы сохранили дескриптор осей с момента создания первого графика). Затем мы строим новую фигуру, используя plotyy который содержит старые данные и новые данные.

ax = gca;
h0 = get(ax,'children'); % This is the handle to the plotted line
x1 = get(h0,'xdata');    % Get data for line
y1 = get(h0,'ydata');
cla(ax)                  % Clear axes
plotyy(ax,x1,y1,x2,y2);  % Plot old and new data

Сохранить существующие оси и построить график, добавить вторую ось с новыми данными

Здесь мы используем hold on чтобы предотвратить удаление текущих данных, затем нанесите новые данные с помощью plotyy это также добавляет фиктивный график к левой оси (одна точка 0,0). Затем мы удаляем этот фиктивный сюжет.

Оказывается, что добавление этого фиктивного графика все еще вызывает изменение левой оси. Таким образом, этот код сначала сохраняет расположение отметок и ограничений, а затем применяет их снова после построения. Это также делает левую ось того же цвета, что и линия, которая уже была там.

ax = gca;
yl = get(ax,'ylim');
yt = get(ax,'ytick');
h0 = get(ax,'children');
hold on
[ax,h1,h2] = plotyy(ax,0,0,x2,y2);
delete(h1)
set(ax(1),'ycolor',get(h0,'color'),'ylim',yl,'ytick',yt)

Другие вопросы по тегам