在Octave中,我使用以下方式制作图表:
x = 1:0.1:8.4;
y = x;
plot(x, y, ';Some line;');
并获取
完美!但是,如果我使用:
x = 1:0.1:8.4;
y = sin(x);
plot(x, y, ';Some line;');
我得到了
有没有办法自动调整x和y限制,使得绘制的线不会进入图例区域。请注意,我不想将传奇位置转移到东南外或其他任何地方!我想要一些东西,以便第一个图形保持原样,但第二个图形将增加最大ylim或自动,因为我有很多图表可以自动生成。
这可能吗?谢谢你的帮助。
编辑:检查y的最大值并相应地调整ylim是一种可能的解决方案,但有更清洁的解决方案吗?像旗帜或其他东西,以便Octave自动处理细节?
答案 0 :(得分:1)
因此,作为书面解决方案,您可以尝试以下代码:
y_min=min(y);
y_max=y_min+(max(y)-y_min)*1.1;
x_min=min(x);
x_max=max(x);
plot(x, y, ';Some line;');
axis([x_min x_max y_min y_max])
您可以使用因子(1.1
),如果您想检查图表是否会在移动之前与图例重叠,您可以自己定义图例的区域并使用if检查-case,如果情节进入该区域:
y_min= min(y);
y_max= y_min + (max(y)-y_min)*1.1;
x_min=min(x);
x_max=max(x);
x_legend = floor(numel(x)*0.8);
plot(x, y);
for k=x_legend:1:numel(x)
if y(k)>max(y)-(max(y)-min(y))*0.1
axis([x_min x_max y_min y_max])
break
end
end
您可以在此处修改3个双倍值:1.1
,0.8
和0.1
。玩得开心
答案 1 :(得分:0)
我怀疑它可能比
更简单delta = 1.1*minmax(x);
plot(x, y, ';Some line;');
axis([minmax(x) minmax(y)+[-delta,delta]]);