【问题标题】:How to plot and display a square in Octave?如何在 Octave 中绘制和显示正方形?
【发布时间】:2011-09-10 09:36:10
【问题描述】:

我无法在 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)

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

备注:

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

【问题讨论】:

  • 奇怪,在 Ubuntu 上,我得到了一个漂亮的正方形(正如预期的那样......):postimage.org/image/20h41uw04
  • @Bart:所以,可能是 Windows 问题(再次)。谢谢!
  • axis square 曾经在我的 octave (winXP) 上工作,但自从我上次尝试后就停止了。上次我更新到较新版本时出现问题...
  • 我在 Octave 3.4.2 中遇到了同样的问题。幸运的是,我仍然有 3.0.3 版并行,它在那里工作。

标签: matlab gnuplot octave


【解决方案1】:

我认为这是 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

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


八度 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命令重绘:

好消息是,一旦您正确设置了图形大小,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 输出:

%# 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)。你知道我如何为 Octave 安装 FLTK 吗?我没有发现任何有用的东西,只有 2005 年的旧东西。如果很难,我会​​留下它并手动调整窗口大小。
  • @Jiri:关注this link我之前发的帖子,进入“1.2. Octave-3.4.2-mingw + octaveforge pkgs”部分,下载两个7zip文件,然后按照说明操作提炼。此 3.4.x 版本包含新的 FLTK 引擎,无需外部依赖。
  • 另一条路线是使用 Cygwin(类似 Linux 的 Windows 环境)。您可以从 Cygwin 安装程序本身获取 Octave 3.4.2。说明可在同一页面上找到。我建议你先试试上一个..
  • 再次感谢!我想知道为什么下载需要“ilivid 下载管理器”。我不太热衷于在我的 PC 上安装此类软件。为什么不能正常下载zip文件?
  • @Jiri:如果你有专业知识,你总是可以从源代码自己编译 Octave,尽管我怀疑它在 Windows 上有点涉及。如果没有,您可以使用社区贡献的构建之一,就像我建议的那样。目前,它是唯一提供给 Windows 3.4.x 版本的版本,并且托管在公共文件共享网站上。官方安装程序仅适用于 3.2.x 分支。此外,您应该知道 Octave 是一个可移植的应用程序,因此使用简单的 ZIP 文件而不是安装程序是非常安全的。
【解决方案2】:

这对我有用(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 中提到)。

【讨论】:

  • 很遗憾,这不适用于 Windows。它实际上与我的方法相对应。但无论如何谢谢!你有一些特定的绘图库吗?
  • 在带有 Octave 3.2.4 的 Ubuntu 上,它可以简单地工作,无需调整窗口大小...
  • 好吧,我没有任何绘图库(或 Octave 相关的)的经验,但也许 WikiPedia 中提到的那些可能会有所帮助?
  • @Egon on octave 你也可以edit axis.m。由于这个文件是只读的,它实际上会编辑一个副本,除非你先输入edit editinplace true或者把它放在你的.octaverc
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多