如何在Octave中绘制和显示正方形?

时间:2011-09-10 09:36:11

标签: matlab gnuplot octave

我无法在Octave中绘制一个正方形。 我不能强制同等比例的轴,所以我得到一个矩形代替:

enter image description here

以下试验不起作用:

x = [0, 1, 1, 0, 0]';
y = [0, 0, 1, 1, 0];
plot(x, y), axis equal, axis([-1,2, -1,2])
% figure('Position', [10,10,100,100]); %[startx,starty,width,height]
% plot(x, y)

我可能需要指定一个固定的窗口大小 缩放轴。当第一个这样的显示窗口时,我会很满意 会显示正确的方格。豪华的解决方案将成为窗口 (或其内容) 没有交互式可调整大小。

说明:

  1. 我在Windows XP上安装了Octave 3.2.4。
  2. Stackoverflow中的建议 不起作用。

2 个答案:

答案 0 :(得分:6)

我认为这是Gnuplot的windows输出设备的一个问题。将其与wxt设备进行比较:

Gnuplot 4.4.3,WinXP

# Gnuplot, wxWidgets terminal
set terminal wxt size 200,400
set size ratio -1        # set size square
plot x

# Gnuplot, Windows terminal
set terminal windows size 200,400
set size ratio -1        # set size square
plot x

gnuplot_wxWidgets_terminal gnuplot_Windows_terminal

请注意,对于“win terminal”,尺寸会影响图形尺寸,包括窗口标题栏和状态栏,而对于“wx终端”,它只会设置内部绘图区域


Octave 3.4.2,WinXP

不幸的是,当我在Octave中尝试此操作时,它仍然不适用于两种终端类型。事实上,the problem是使用set(gcf,'position',[..])调整数字大小没有效果:

# Octave, backend=Gnuplot, terminal=wxt/windows
graphics_toolkit gnuplot     # backend gnuplot
setenv('GNUTERM','wx')       # wx/windows
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis([-10 10 -10 10])
axis equal                   # axis square

因此,我不得不使用鼠标手动调整图形的大小(200,400)(是的,我实际上拉了virtual ruler并测量像素!)。最后调用refresh命令重新绘制:

octave_gnuplot_wx_resized octave_gnuplot_windows_resized

好消息是,一旦您正确设置了数字大小,axis equal适用于两种终端类型。

另一方面,新的FLTK后端行为正常,没有任何黑客攻击,所以你可能想切换到它:

# Octave, backend=FLTK
graphics_toolkit fltk        # backend fltk
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis([-10 10 -10 10])
axis equal

octave_fltk


MATLAB

作为参考,这是MATLAB输出:

%# MATLAB
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis equal
axis([-10 10 -10 10])

matlab

答案 1 :(得分:3)

这对我有用(Linux上的Octave):

x = [0, 1, 1, 0, 0]';
y = [0, 0, 1, 1, 0];
plot(x, y)
axis([-1,2, -1,2])
axis equal % or axis square

但是,这只会在你调整图形窗口大小之前有效,所以我承认它有点烦躁。所以为了通过Octave得到你想要的东西,我想你必须在调用axis equal之前放置你的数字窗口并进行所有更改。多次致电axis equal我很幸运。

我想这与GnuPlot中的限制有关(但我没有支持该声明的硬数据),因此您可以尝试其他绘图库以查看展示是否具有相同的行为。

修改: 为了完整性,我的代码产生的图表(如果我不重新调整图形窗口)

enter image description here

如果没有任何工作,可以尝试调试正在调用的Octave代码。在MATLAB中,您可以通过键入edit axis来检查相应的代码,但在Octave中,我猜您必须提供axis.m文件的完整路径(在help axis中提到)。