推荐使用哪种软件和工作流程来发布科学数据和图表?

计算科学 可视化 数据管理
2021-12-16 19:45:47

哪个软件提供了从简单绘制几个数据点到创建具有详细样式、数学排版和“专业品质”的出版级图形的良好工作流程?

这与 David 的问题(什么属性使人物具有专业品质? )有点相关,但重点不是属性,而是软件或实现目标的一般工作流程。我对许多程序(Gnuplot、Origin、Matplotlib、TikZ/PGFplot、Qtiplot)有肤浅的经验,但同时进行数据分析和漂亮的数字似乎很难做到。

是否有一些软件允许这样做,或者我应该深入挖掘其中一个软件包?

编辑:我目前的工作流程是不同组件的混合,它们或多或少地协同工作,但总的来说效率并不高,我认为这对于大学实验室的许多科学家来说是典型的。通常,它是一个从实验开始到发布的链条,如下所示:

  1. 获取实验数据(通常为 ASCII 格式,但布局不同,例如标题、注释、列数)
  2. 快速绘制数据以检查 20 年前编写的 Origin、Gnuplot 或神秘绘图程序是否没有出错。
  3. 更详细的数据分析:减去背景贡献,分析依赖性和相关性,拟合理论模型。许多科学家使用 Origin 来完成这项任务,一些 Matlab 和 Python/Scipy/Numpy 的使用正在增加。
  4. 创建专业人物,这涉及调整期刊指南、数学排版和一般编辑。目前我为此使用 Origin,但它有几个缺点(只是尝试获得正好 0.5pt 的线宽,这是不可能的)。对于组合/抛光图形,我主要使用 Adob​​e Illustrator,因为它可以很好地处理 PDF 文档的 im-/export,但我不希望每个图表都经过两个步骤。

我添加了一个最终看起来如何的示例(因为这主要是通过手动创建的,更改任何东西都是痛苦的,任何提供接口(例如为所有元素设置线宽)的东西都会很好):在此处输入图像描述

4个回答

如果您对 Python 有一定的经验(甚至没有),我建议您将可用的 Python 科学软件(SciPyPandas、...)与Matplotlib一起使用。作为一个编程环境,您可以完全控制数据流、数据操作和绘图。您还可以使用“完整应用程序” Mayavi2Veusz

根据您所说的,通用脚本语言可能是您最好的选择,只要它具有您可以访问的某种图形功能(无论是内置的还是导入的)。

在这种情况下,MATLAB 可以工作,尽管您必须使用线宽、符号和轴来获得演示质量的绘图。鉴于您的标准,我想说 MATLAB 的最大弱点是详细的数学排版;MATLAB 可以使用一些 TeX 标签,但是它无法处理一些 LaTeX 命令,所以我记得不得不返回并从 Adob​​e Illustrator 中的 PDF 中剪切和粘贴一些 LaTeX 标签。

Python + NumPy 将适用于数据导入,因为numpy.loadtxt可以轻松导入文本数据。那时,您可以在 matplotlib 和 Gnuplot 之间进行选择(通过Gnuplot.py有一个 Python 接口;自 2008 年以来,该接口没有任何积极的开发,但话又说回来,Gnuplot 是否已经发生了如此大的变化,即使它不断添加版本? )。MatthewEmmett 的 PyAsy 包装器也可以工作,这取决于您想要做什么。Matplotlib 具有出色的数学排版功能(正如 Barron 所指出的),并且可以使用 NumPy、SciPy 或任何其他 Python 包来完成数据操作。

我对 gnuplot 本身的问题是它实际上是为绘图而构建的。我不清楚如何在 gnuplot 脚本语言中操作数据。在将其输出为文本之前,我基本上提前完成了所有数据操作,因为我无法弄清楚如何去做。您可以使用 gnuplot 来评估公式,并进行一些操作,但对我来说,Python 具有更自然的语法,并且比 gnuplot 具有更大的通用性。我不想为了做一件事而学习另一种语言,除非它是一种非常自然、易于学习的语言。(或者除非我被迫这样做。)

Tecplot 360 也有类似的问题。Tecplot 360 产生惊人的情节,尤其是在 3D 中。您可以使用相对容易学习的 GUI 使用 Tecplot 360 执行某些操作,而在另一个绘图包中您可能很难做到。我上一次使用 Tecplot 是在 6 或 7 年前;显然,从那以后他们增加了很多功能。数据操作可以通过索引、切片或建立区域来完成。导出量可以使用方程式计算。您还可以对数据进行傅里叶变换,执行插值(或克里金法),并执行许多其他操作。目前尚不清楚如何进行数学排版。我猜你可以破解 Tecplot 的 HTML 输出并添加 MathJax 或 MathML?在我看来,关于 Tecplot 的缺点是它不是免费的(这意味着作为一种工具,你可能无法从一个工作带到另一个工作),不确定的数学排版,以及编写复杂数据操作的脚本需要学习 Tecplot 的宏语言。主要优点是它的 3D 绘图能力远远超过了 matplotlib 和 MATLAB。可以使用 Tecplot 的宏/脚本语言批量绘制数据,并调用外部 Python 脚本(具有一些有限的功能)。此外,与 MATLAB 类似,如果您不想学习 Tecplot 脚本,可以使用 GUI。(Tecplot 的 GUI 比 MATLAB 的功能全面得多。)主要优点是它的 3D 绘图能力远远超过了 matplotlib 和 MATLAB。可以使用 Tecplot 的宏/脚本语言批量绘制数据,并调用外部 Python 脚本(具有一些有限的功能)。此外,与 MATLAB 类似,如果您不想学习 Tecplot 脚本,可以使用 GUI。(Tecplot 的 GUI 比 MATLAB 的功能全面得多。)主要优点是它的 3D 绘图能力远远超过了 matplotlib 和 MATLAB。可以使用 Tecplot 的宏/脚本语言批量绘制数据,并调用外部 Python 脚本(具有一些有限的功能)。此外,与 MATLAB 类似,如果您不想学习 Tecplot 脚本,可以使用 GUI。(Tecplot 的 GUI 比 MATLAB 的功能全面得多。)

TikZ 和 PGFPlots 等基于 LaTeX 的工具似乎不适用于您的用例。这里的弱点是数据操作;TikZ 和 PGFPlots 是很棒的 LaTeX 工具。我希望我知道如何更好地使用它们。由于它们是 LaTeX,我猜工作流程是将必要的数据剪切并粘贴到 LaTeX 中并绘制它。可以在 LaTeX 中执行程序,但我看不出这种能力对你有什么帮助,因为对于演示文稿或文档,你描述的用例表明你可能只会保留完成的产品。也许你对那个工作流程没意见;这两种工具都以精心设计和制作高质量人物而闻名。

最后,就像你说的,Adobe Illustrator 是一个很好的绘图工具;正如您所说,缺陷还在于缺乏可编写性或可重复性,但如果您想进行小调整,没有什么比图形编辑程序更好的了。

另一个要考虑的软件包是AsymptoteAsymptote 实际上是一种编程语言(具有类似 C++ 的语法),它产生基于向量的输出。一个不错的功能是文本是用 LaTeX 呈现的(包括数学方程式),因此您的图形中的文本与您的文档一致。

我为 Asymptote 编写了一个名为PyAsy的 Python 包装器,这样我就可以将 NumPy 数组传递给 Asymptote 引擎并进行一些基本的绘图。它相当粗糙并且功能不完整,但它可能会有所帮助。

无论如何,Asymptote 的输出质量非常好。

编辑:除此之外,我发现Fabric对于启动远程作业、同步目录和构建二进制文件、获取运行数据和/或启动远程分析脚本非常有帮助。它是一个相当轻量级的 Python 库,它使运行远程命令变得更容易(并且可编写脚本)。

我认为这是一个很好的问题,也是我现在最关心的问题。在阅读大多数数学类期刊时,Matlab 似乎是可以接受的,但恕我直言,它无法与 PNAS、Nature、PLoS ONE 等期刊中出现的一些漂亮的图表相媲美。

在我的研究小组中确切讨论了这个问题几个星期之后,我们仍然没有得出关于哪个包最好的真正结论。我们发现,文档、博客或其他网络资源中的大多数图形软件比较在确定哪个软件包最适合特定用途方面在很大程度上是无用的。

我认为真正能帮助不是所有/许多这些包专家的普通用户的是拥有一小组非常明确的示例,可以用作各种“图形基准”(在类似的感觉作为CFD 基准)。据我所知,目前不存在这样的情况。

至少,我希望看到:

  1. 一个相当简单的 2D 线图,具有多种线和点类型、图例、标签/标题中的数学等。
  2. 3D 曲面图同上。
  3. 一个更复杂的 3D 图,包含等值面、切割平面,也许还有其他一些奇特的特征。
  4. 精美的 3D 图。

将为#1-3 提供数据,为#4 提供照片或“原始”图表。对于每个示例,将发布代码(输入)和图像(输出)。这将使读者更容易判断哪个包适合他们,无论是在图像质量还是代码复杂性方面。

我的计划是在接下来的几个月里,在我的小组中为#1、2、4 和少数软件包(包括 Matlab、pgf/TikZ、python/scipy)做类似的事情。如果有兴趣,我可以公开发布。

因此,虽然这还不是对最初发布的问题的答案对此我深表歉意),但它可能会在几个月后得到答案。