Октава: добавить вторичную ось y к существующему графику - PullRequest
0 голосов
/ 02 января 2019

Я использую Octave 4.2.1 portable под Win 10.

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

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

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

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 Ответ

0 голосов
/ 03 января 2019

Вот два варианта. Я тестировал их в 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

plot with left and right axis

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

Здесь мы используем 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)

plot with left and right axis

...