GNU Octave进行科学绘图的一些问题

本文介绍如何在Octave中实现科学绘图,包括遇到的问题及解决方法,如64位Win7上无法使用plot命令、XP上图象窗口冻结等问题,并提供了图形输出终端的使用技巧,以及在figure中字体与作图区域大小的设置方法。

作为 Matlab 的一个开源替代品,GNU Octave 与其类似又有所不同。尤其在科学绘图方面,开始使用会很不习惯。这里不能不说,没有商业的支持,在专业软件领域,开源软件的质量、易用性和全面的功能难以保证:毕竟其只是对高级用户和有精力且愿意在上面花时间的人提供了一个开放的窗口,让你可以进去看个究竟;普通用户的使用体验则是次要的事情。与 Matlab 相比, GNU Octave 的科学绘图效果可以说是差得太远。不过通过一番测试和调整,自己还是利用Octave得到了较为满意的作图效果,用于发文章、写报告倒是足够了。以下记录了一些使用过程中遇到的问题和解决办法。
64 位 Win7 上无法使用 plot 命令
之前在 64 位 Win7 上直接安装了 Octave 的 Windows binary (MinGW32 version),但是做图命令 plot 一直出错。现在从这里查到是由于 octave-forge 中的 oct2mat package 出了问题。安装的时候将其取消就好了。若已经装好了 Octave ,则可以在 Octave 提示符下执行下面的命令,使 Octave 在启动时不加载 oct2mat package :

pkg rebuild -noauto oct2mat
若还想重新启用 oct2mat ,则执行:

pkg load oct2mat
XP 上图象窗口冻结,无法刷新
在 XP 上运行 Octave ,弹出的 figure 窗口无法刷新,根本看本不到曲线。将其(后台的 gnuplot )强行关闭后,再调用 plot 命令就什么反应也没有了。后来发现,使用 refresh 命令即可以重绘figure窗口,重新获得响应。与清空和重绘 figure 的几个命令如下:

clf 或 clearplot :用于清空当前的 figure 窗口。调用 clf() 其实质为删除当前 figure 窗口中的可见 handles 。若调用 clf("reset") ,则删除所有的 handles 。
cla :清空当前的坐标系。
drawnow :刷新窗口和其子对象,清空事件队列并执行已生成的回调函数。
refresh :刷新 figure 并重绘。

drawnow 与 refresh 的区别为:

Only figures that are modified will be updated. The `refresh' function can also be used to force an update of the current figure, even if it is not modified.
因此, refresh 可以用于刷新已冻结的 figure 窗口,而 drawnow 不行。

Octave 的图形输出终端
默认情况下,Octave 的 plot 命令将图片输出至图形界面,这其实用的就是 gnuplot 的 windows 终端或者 wxt 终端(即 wxWidget 终端,在弹出的窗口上有旋转、放大等按钮,功能更全面)。为了将图片输出至文件,则可以使用 print 命令。若输出为矢量图,则应选择彩色的 epsc2 。若使用黑白的 eps 终端,则无论如何设置线型和线宽都无效,似乎是 eps 终端自身有一套线型和线宽的设置。

figure 中字体与作图区域大小的设置
由 Octave 直接导出的 figure 字体非常小,无法辩识。这是由于 figure 对象默认的绘图区域大小为 8.5x11 英寸,而 axis 对象默认字体大小为 12pt (作图是在 figure 对象中的 axis 对象内进行)。这里,对象的属性可由 get 命令获得,例如:

get(0);                         # 获取屏幕属性
h = figure(1);
get(h);                         # 获取 figure 属性
plot(...);
get(gca);                       # 获取 axis 属性
由此可以得到 figure 的属性 papersize 和 paperunits , axis 的属性 fontsize 。

若不改变绘图区域的大小,将字体放大至 28pt 较为合适。但需注意,若字体设置得过大且 figure 的 x 或 y 轴标题过长时,显示出来的字符会超出纸面。同时,由于改变了默认字体大小,在执行 print 命令导出图片时,还需要使用选项 -F:SIZE ,从而可以保证合适的字符间距,否则坐标轴的 tick label 会与 x 或 y 轴标题重叠。虽然,文档中声称 -F:SIZE 选项用于指定 figure 中所有文本的大小,但事实上它的作用只是给整个图形环境设置一个默认字体大小,相应的字符间距由这个量来控制。通过测试可以发现,若只使用 -F:SIZE 选项而不指定 axis 的字体大小,则输出的字体仍为默认的 12pt 。下例则为输出至 epsc2 终端并将其转换为 png 格式的命令:

print(h, "output.eps", "-depsc2", "-F:28");
system("gswin32c -dNOSAFER -r1200 -dBATCH -sDEVICE=png16m -dNOPAUSE -dEPSCrop -sOutputFile=output.png output.eps");
marker 属性设置
尽管 Octave 中有 markeredgecolor 与 markerfacecolor 选项,但其实际并不支持分别设置这两个选项,这是由于 gnuplot 本身的限制造成的。当线型为 line & marker 时, color 属性同时设置线条与 marker 的颜色。若想要二者的颜色不同,也比较好解决,将线和 marker 分开画就是了。当单独画 marker 时,则将 markeredgecolor 与 markerfacecolor 设为相同的颜色即可。此时亦可以设置 linewidth 属性,其实质为 marker 的边沿宽度。

tick label 的设置
设置 tick 的位置:

set(gca, "xtick", xtick_values);
set(gca, "ytick", ytick_values);
设置 tick label 字符串:

set(gca, "xticklabel", xlabels);
set(gca, "yticklabel", ylabels);
其中, xlabels 与 ylabels 为字符串 cell array 。

 

 

GNU Octave 是一个广泛使用的数值计算平台,特别适用于科学计算和工程分析。它提供了一个强大的环境,用于执行数值计算、数据可视化、算法开发以及与外部数据源的交互。以下是一些关于如何使用 GNU Octave 的指南和关键功能的介绍。 ### 安装与配置 GNU Octave 支持多种操作系统,包括 Windows、Linux 和 macOS。可以从其官方网站下载最新版本的安装包,并根据操作系统的不同选择合适的安装方式。安装完成后,用户可以通过命令行或图形界面启动 Octave。 在 Linux 系统中,可以使用包管理器安装 GNU Octave。例如,在基于 Debian 的系统上,可以运行以下命令: ```bash sudo apt-get install octave ``` 在 Windows 和 macOS 上,则可以直接下载安装程序并按照提示完成安装过程。 ### 基本操作 GNU Octave 的语法与 MATLAB 非常相似,因此熟悉 MATLAB 的用户可以轻松上手。以下是几个基本操作示例: - **定义变量**:可以直接在命令行中定义变量并进行运算。 ```octave a = 5; b = 10; c = a + b; ``` - **矩阵操作**:Octave 支持高效的矩阵运算,这是其核心功能之一。 ```octave A = [1, 2; 3, 4]; B = inv(A); # 计算矩阵的逆 ``` - **绘图功能**:可以使用内置函数进行数据可视化。 ```octave x = 0:0.1:2*pi; y = sin(x); plot(x, y); title("Sine Wave"); xlabel("x"); ylabel("sin(x)"); ``` ### 扩展功能 GNU Octave 提供了丰富的扩展功能,特别是通过其包管理系统可以安装额外的工具包,以增强其功能。例如,Symbolic Package 可以与 SymPy 结合使用,进行符号计算[^2]。该包通过动态生成 Python 代码来处理符号计算任务,并将结果返回 Octave 环境,从而实现了与 Python 的无缝集成。 要安装 Symbolic Package,可以使用以下命令: ```octave pkg install -forge symbolic ``` 安装完成后,可以加载该包并开始进行符号计算: ```octave pkg load symbolic syms x f = sin(x); df = diff(f); # 对 f 进行求导 disp(df); ``` ### 高级应用 GNU Octave 不仅限于基础的数值计算,还可以用于更复杂的科学和工程任务。例如,它支持与网络服务的数据通信,可以用于处理大规模数据集、构建仿真模型以及进行优化计算。此外,Octave 还支持脚本和函数文件的编写,使得用户可以创建复杂的程序和算法。 ### 教育与科研应用 在教育领域,GNU Octave 被广泛用于教授数值方法、线性代数、微积分等课程。学生可以使用 Octave 来验证理论结果,并通过可视化工具更好地理解数学概念。在科研方面,Octave 提供了强大的工具来进行数据处理、建模和仿真,适用于物理学、工程学、经济学等多个领域。 ### 社区与支持 GNU Octave 拥有一个活跃的社区,用户可以在官方论坛、邮件列表以及 GitHub 项目页面上找到帮助和支持。此外,Octave 的文档非常详尽,涵盖了从基础语法到高级功能的各个方面。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值