仓库源文站点原文

gnuplot是一个功能强大的开源绘图工具. 对于一个程序而言, 它自身的历史足够长了. 我使用它也有不少年了, 博文中有不少是相关的. gnuplot命令简单, 一行代码就可以绘制数据, 熟悉后可以快速地查看数据效果, 生成出版质量的图片, 分析实际数据也不在话下. gnuplot足够简单, 却也很灵活, 支持的各种语法组合起来, 基本可以视为一种完备的语言, 虽然处理速度不佳.

与Linux理念类似, gnuplot整体偏向命令行使用, 因此很大一部分功能来源于能够脚本化, 但也因此学习曲线稍陡, 对于没有命令行使用经验的新用户, 更是如此.

对于简单的数据分析与绘图, 或是演示, 使用gnuplot命令行都稍显麻烦, 如果在浏览器中运行可能更方便. 这就需要我们想办法将gnuplot移植到浏览器中, 做成在线版.

目前见到的在线版gnuplot并不多, 有已经失效的老版本, 有使用WebAssembly重新编译的gnuplot-in-the-browser, gnuplot-wasm, 还有一个node版.

gnuplot在线版支持的终端比较简单, 因为支持png之类的图形终端会大大增加其文件大小, 而且比较困难, 实际上也不大必要. 综合考虑, 只需要支持svg和canvas终端就可以了. 再考虑到只有svg终端可以使用浏览器支持的字体, 所以要精简的话, 可以只支持svg终端.

gnuplot默认的绘图设置并不美观, 为了避免每次绘图都设置一大堆选项, 可以将自己偏好的设置作为初始化文件载入, 这样也可以保证每次的绘图设置类似, 形成自己的风格. 因此, 我曾花费了不少时间仔细调整了各种选项, 尽量保证绘制的图可以直接作为论文配图.

除绘制函数与数据外, gnuplot还支持非线性拟合, 几行代码就可以将数据拟合为任何函数形式, 默认的非线性最小二乘拟合算法为Marquardt-Levenberg, 而且拟合时也可以包含x, y的误差.

尽管容易使用, gnuplot的拟合效果却很好. 以NIST非线性回归数据集为例, 对其中的所有示例, gnuplot几乎都能给出预期结果, 差异在百分之几以内. 只有几个测试失败, 与预期结果有显著差异的更多一些. 这些测试中有一些非常困难的, 因此, 得到这样的结果并不意外. 具体的测试结果可以参考Gnuplot Online上的代码与测试结果.