我无法在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)
我可能需要指定一个固定的窗口大小 缩放轴。当第一个这样的显示窗口时,我会很满意 会显示正确的方格。豪华的解决方案将成为窗口 (或其内容) 没有交互式可调整大小。
说明:
答案 0 :(得分:6)
我认为这是Gnuplot的windows
输出设备的一个问题。将其与wxt
设备进行比较:
# 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
请注意,对于“win terminal”,尺寸会影响图形尺寸,包括窗口标题栏和状态栏,而对于“wx终端”,它只会设置内部绘图区域
不幸的是,当我在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
命令重新绘制:
好消息是,一旦您正确设置了数字大小,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
作为参考,这是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])
答案 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中的限制有关(但我没有支持该声明的硬数据),因此您可以尝试其他绘图库以查看展示是否具有相同的行为。
修改强>: 为了完整性,我的代码产生的图表(如果我不重新调整图形窗口)
如果没有任何工作,可以尝试调试正在调用的Octave代码。在MATLAB中,您可以通过键入edit axis
来检查相应的代码,但在Octave中,我猜您必须提供axis.m
文件的完整路径(在help axis
中提到)。