自动避开图例

时间:2014-06-30 07:32:48

标签: matlab plot octave

在Octave中,我使用以下方式制作图表:

x = 1:0.1:8.4;
y = x;
plot(x, y, ';Some line;');

并获取

enter image description here

完美!但是,如果我使用:

x = 1:0.1:8.4;
y = sin(x);
plot(x, y, ';Some line;');

我得到了

enter image description here

有没有办法自动调整x和y限制,使得绘制的线不会进入图例区域。请注意,我不想将传奇位置转移到东南外或其他任何地方!我想要一些东西,以便第一个图形保持原样,但第二个图形将增加最大ylim或自动,因为我有很多图表可以自动生成。

这可能吗?谢谢你的帮助。

编辑:检查y的最大值并相应地调整ylim是一种可能的解决方案,但有更清洁的解决方案吗?像旗帜或其他东西,以便Octave自动处理细节?

2 个答案:

答案 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.10.80.1。玩得开心

答案 1 :(得分:0)

我怀疑它可能比

更简单
delta = 1.1*minmax(x);
plot(x, y, ';Some line;');
axis([minmax(x) minmax(y)+[-delta,delta]]);