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