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

Jir*_*riz 2 matlab gnuplot octave

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

在此输入图像描述

以下试验不起作用:

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)
Run Code Online (Sandbox Code Playgroud)

可能我需要指定一个固定的窗口大小和相同的缩放轴.当第一个这样的显示窗口显示正确的方格时,我会感到满意.奢侈的解决方案会使窗口(或其内容)不能以交互方式调整大小.

备注:

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

Amr*_*mro 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
Run Code Online (Sandbox Code Playgroud)

gnuplot_wxWidgets_terminal gnuplot_Windows_terminal

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


Octave 3.4.2,WinXP

不幸的是,当我在Octave中尝试这个时,它仍然不适用于两种终端类型.事实上,问题是使用数字调整大小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
Run Code Online (Sandbox Code Playgroud)

因此,我不得不使用鼠标手动调整图形大小到指定的大小(200,400)(是的,我实际上拉了一个虚拟标尺并测量了像素!).最后调用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
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)

MATLAB