Legend fora da plotagem não funciona com parcy no Octave
Estou tentando criar uma plotagem no Octave (usando a v4.4.1 no Windows) usandoplotyy
e colocando a legenda fora da plotagem (porque os dados cobrem todo o espaço útil dentro do gráfico). O seguinte MVCE deve reproduzir o problema razoavelmente bem:
% Generate some random data to reproduce the issue
data = rand(1000,10);
data(:,1:8) = data(:,1:8)-0.5;
data(:,9:10) = data(:,9:10)+30;
timedate = linspace(737310,737313,size(data,1));
data_labels={'1';'2';'3';'4';'5';'6';'7';'8';'9';'10'};
% Plot the data
figure('Name','MVCE','Position',[300 200 1000 600])
[ax,h1,h2] = plotyy(timedate,data(:,1:8),timedate,data(:,9:10));
set(h2,'Visible','on');
datetick(ax(1),'x','HH:MM:SS')
datetick(ax(2),'x','HH:MM:SS')
ylim(ax(1),[-1 1])
ylim(ax(2),[20 50])
xlabel('Date & time')
ylabel(ax(1),'Something')
ylabel(ax(2),'Something else')
title('plotyy graph with legend problem')
[hl,hlo] = legend([h1;h2],data_labels,'location','eastoutside');
grid on
Esta a saída do código usando ognuplot
kit de ferramentas gráficas:
Como você pode ver, a legenda não sai da plotagem e o segundo eixo y não é visível (parece que parte da plotagem está realmente truncada
Eu tentei usar oqt
efltk
kits de ferramentas gráficas, que fornecem problemas próprios:
qt
kit de ferramentas de gráficosWithfltk
kit de ferramentas de gráficosAlguém pode sugerir uma correção ou pelo menos uma solução alternativa? O mesmo problema também ocorre no MATLAB ou é específico do Octave?
EDITA Usando a sugestão na resposta de Tasos, consegui quase fazê-lo funcionar comgnuplot
:
% Plot the data
figure('Name','MVCE','Position',[300 200 1000 600])
[ax,h1,h2] = plotyy(timedate,data(:,1:8),timedate,data(:,9:10));
set(h2,'Visible','on');
datetick(ax(1),'x','HH:MM:SS')
datetick(ax(2),'x','HH:MM:SS')
ylim(ax(1),[-1 1])
ylim(ax(2),[20 50])
ax1Pos = get(ax(1), 'position');
ax2Pos = get(ax(2), 'position');
ax1Pos(3) = ax1Pos(3) * 0.73;
ax2Pos(3) = ax2Pos(3) * 0.73;
set(ax(1), 'position', ax2Pos);
set(ax(2), 'position', ax2Pos);
xlabel('Date & time')
ylabel(ax(1),'Something')
ylabel(ax(2),'Something else')
title('plotyy graph with legend problem')
[hl,hlo] = legend([h1;h2],data_labels,'location','eastoutside');
pos = get(hl,'Position');
pos(1) = 0.9;
set(hl,'Position',pos)
grid on
Que produz:
Além do fato de a legenda se sobrepor à segunda etiqueta do eixo y (o que não aparece na minha tela, apenas ao imprimir emjpg
), o problema é que o Octave parece plotar duas legendas umas sobre as outras por algum motivo: uma com o primeiro conjunto de dados anexado ao primeiro conjunto de eixos e outra com o conjunto completo de dados, para os dois eixos à direita no topo da primeira lenda. Obviamente, isso está errado, e tentar definir oVisible
propriedade dehl
paraoff
exclui as duas legendas, não apenas