开坑:SciDraw — Mathematica 科学绘图包

自己在调整 Mathematica 绘图样式的时候总感觉不够意思(审美无能___*(  ̄皿 ̄)/#____),字体、图片大小、坐标轴样式等等调整起来比较耗费功夫,并且有时候不容易达到统一的效果,内置的 PlotTheme 对于论文插图来说也不够精美。

搜索一番,发现了 Mathematica 的 SciDraw 绘图包,样式深得我心。

SciDraw-Example.png

开坑学习🤣。

注意:SciDraw 绘制大量数据时会非常卡顿。如果数据量太大,建议正式出图时再使用。

官方地址

官方地址 SciDraw

网站上最新的版本是 SciDraw-0.0.7.zip 2015-03-28 22:08 6.9M ,为了方便我在本地提供一个最新备份

安装包内含有 docpackages 两个部分:

  • doc:帮助文档和官方提供的案例
    • SciDrawGuide.pdf 帮助手册,必读
    • Examples-XXX.nb 案例,可直接参考
    • ...
  • packages:需要在 Mathematica 中导入的包

在 Mathematica 中导入包

导入包的详细说明在 SciDrawGuide.pdf 中的 page5 -- page8。本文主要简述 Windows 系统下导入,其他系统类似。

第一步:将 SciDraw 包的文件导入 Mathematica 的默认路径 $Path

比如其中的 packages 文件夹的存放路径为 D:\SciDraw\packages,添加路径如下

1
AppendTo[$Path, "D:\\SciDraw\\packages"]

关于 windows 下路径的写法,正确地表达 \ 需要转义,因此实际上写成 \\ 才是正确的路径输入方式。如果代码跨系统 (Linux, Macos) 使用的情况,可以统一使用 / 代替 \,即

AppendTo[$Path, "D:/SciDraw/packages"]

另外,每次重启 Mathematica,默认路径 $path 会重置,注意重新导入。如果觉得不便可以自行修改初始化文件 init.m,在打开 Mathematica 时自动导入。

第二步:加载 SciDraw

直接运行以下代码即可

1
Get["SciDraw`"]

在 10.4 版本以上时导入会出现类似 SetDelayed::write: "Tag BoundingRegion in BoundingRegion[...] is Protected." 的报错, 具体原因参考官方说明

This is due to name conflicts introduced with Mathematica 10.4. You may safely ignore these messages and continue using SciDraw normally, except that SciDraw's BoundingRegion function will not be available to you. This issue will be addressed in the next release of SciDraw.

总而言之,忽略即可,如果实在看不顺眼,可以取消错误输出。

1
2
(* 取消错误输出 *)
Get["SciDraw`"] // Quiet

基本的绘图框架

详细说明参考 SciDrawGuide.pdf 中的 page9 涉及的函数可以直接在 SciDrawGuide.pdf 中搜索找到详细的说明和选项。因此文中不在详述

创建“画布”

SciDraw 引入了固定大小的“画布”。这是因为 Mathematica 绘图命令输出的图像会把图像压缩到某个给定大小的区域,使得图像本身和轴标签、刻度等不协调。对于简单绘图的情况,这种自动缩小影响可能不大;但是在创建几个相同大小的图像,并且需要加上各种标签进行标注时,图像大小的变化会直接导致排版混乱。引入“画布”正是为了解决这个问题。

先创建一张空白画布

1
2
3
4
Figure[
(*用于包含图像的主体*)
Canvas -> {5, 3.5}
]

创建画布时还有其它一些选项,例如:

  • 添加外框 CanvasFrame->True
  • 调整外边距大小为 0 CanvasMargin->0
  • 调整尺寸单位 CanvasUnits->Centimeter

创建绘图面板

绘图图像绘制在绘图面板中,一张画布可以有多个绘图面板。面板由函数 FigurePanel 创建。

作者举了一例来帮助理解其中的层次概念: Figure[xxx] 函数相当于 LaTeX 中的 \begin{document} xxx \end{document}FigurePanel[xxx] 函数相当于 LaTeX 文档中需要插图图片时创建的环境,例如 \begin{figure} xxx \end{figure}