建议使用哪些软件和工作流程来发布科学数据和图表?


40

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

这与David的问题有关(哪些属性使图形具有专业品质?),但重点不是属性,而是软件或通用的工作流程。我对一些程序(Gnuplot,Origin,Matplotlib,TikZ / PGFplot,Qtiplot)有肤浅的经验,但是同时进行数据分析和漂亮的数字似乎很难做到。

是否有一些软件可以做到这一点,还是我应该更深入地研究其中一个软件包?

编辑:我当前的工作流是不同组件的混合,它们或多或少地协同工作,但总的来说并不能真正有效,我认为这对大学实验室的许多科学家来说都是很典型的。通常,它是一条从实验到发布的链条,如下所示:

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

我添加了一个示例,最后看起来是什么样的(因为大多数情况下都是通过手工更改来创建的,这很痛苦,并且提供界面(例如,为所有元素设置线宽的界面的任何内容都会很不错)):在此处输入图片说明


2
也许您应该澄清您的要求。以目前的形式,问题只是吸引了大量的软件。没有人详细描述系统的优点和缺点。看着它,不会帮我选择一个。当然,所有技术计算软件,MATLAB,Mathematiac,Maple,所有基于Python的解决方案,R等都有许多用于创建图的工具。然后是GUI工具,例如Origin和xmgrace。哪一个是最佳选择取决于您的需求。
Szabolcs 2012年

@Szabolcs:我同意我的问题有点广泛。我的工作流程并不总是相同的,因为我正在分析来自不同实验的数据,因此我尝试使问题更笼统。
亚历山大

Answers:


31

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


14
Matplotlib +1。除了上述要点外,在文本字段中使用LaTeX的功能还可以为您提供所需的“数学排版”。
巴伦(Barron)2012年

对enthought的chaco有什么建议吗?
pcr 2012年

1
Chaso非常适合交互式剧情。完全不同的动物恕我直言。
meawoppl 2012年

2
对于Matplotlib的即时美化,请查看seaborn
克里斯蒂安·克拉森2014年


15

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

在这种情况下,即使您必须使用线宽,符号和轴来表示质量的图,MATLAB也能正常工作。给定您的标准,我想说MATLAB的最大弱点是详细的数学排版。MATLAB可以使用一些TeX标签,但是有些LaTeX命令无法处理,因此我记得必须回去从Adobe 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中。使用Tecplot 360,您可以使用相对易于学习的GUI进行某些操作,而您可能很难在另一个绘图程序包中完成这些操作。我上一次使用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和PGFPlot等基于LaTeX的工具似乎并不是为您的用例而设计的。这里的弱点是数据操作。TikZ和PGFPlots是出色的LaTeX工具。我希望我知道如何更好地使用它们。由于它们是LaTeX,所以我猜工作流程是将必要的数据剪切并粘贴到LaTeX中并进行绘制。可以在LaTeX内执行程序,但是我不知道该功能将如何对您有所帮助,因为对于演示文稿或文档,您正在描述的用例表明您可能只会保留完成的产品。也许您对这个工作流程还好;两种工具均以精心设计和产生高质量图形而闻名。

最后,就像您说的那样,Adobe Illustrator是修饰图的绝佳工具。缺陷也像您所说的那样缺乏脚本性或可重复性,但是如果您要进行细微的调整,没有什么比图形编辑程序更好的了。


1
我只想在这个很好的答案中添加一点评论。无需使用Adobe产品。开源工具inkscape还将为您提供完善的绘图工具。与LaTeX插件结合使用,可以做得很好。
Azrael3000

10

我认为这是一个很好的问题,并且这是我现在心目中最重要的问题。在阅读大多数数学类期刊时,Matlab似乎可以接受,但是它无法将IMHO评估为PNAS,Nature,PLoS ONE等期刊中出现的一些精美图表。

在我的研究小组中讨论了这个问题几周后,我们仍然没有得出关于哪种方案最好的真正结论。我们已经发现,在确定文档,博客或其他Web资源中大多数图形软件的比较中,对于确定哪种软件包最适合给定的目的是没有用的。

我认为,对于不是所有/很多软件包专家的普通用户真正的帮助是拥有一小组非常明确的示例,可以用作各种“图形基准”(类似作为CFD基准)。据我所知,目前还没有这样的东西。

至少,我希望看到:

  1. 合理简单的2D线图,具有几种线和点类型,图例,标签/标题中的数学等。
  2. 同上3D表面图。
  3. 具有等值面,切割平面以及其他一些奇特功能的更复杂的3D图。
  4. 精美的3D图。

将为#1-3提供数据,并为#4提供照片或“原始”图表。对于每个示例,将张贴代码(输入)和图像(输出)。从图像质量和代码复杂性两方面,这将使读者可以更轻松地判断哪种包装适合他们。

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

因此,虽然这不是一个问题的最初发布问题,(我对此表示道歉),它可以在几个月的时间回答。


这样建议的基准是一个好主意。如果您不是从给定的数据集和需求开始,则很难比较所有建议的到达最终图表的方法。此外,查看不同语言/软件包的代码可以使您比较哪种代码更适合自己的需求。尤其是使用TikZ时,我的印象是您几乎可以重现任何内容,但可能需要真正的专家才能做到。
亚历山大

我认为基准测试是个好主意;对于您的2D图,我建议您复制Matplotlib画廊中的一些图。已经为每个示例提供了示例代码。对于3D示例,Mayavi 在其文档中有一个类似的,以及一个不错的3D教程示例。在其他软件包中复制其中一些3D图也可能很有用。
Geoff Oxberry 2012年

几个月后,您现在正在使用什么?关于通过黑客(在文本窗口中使用绘图选项,绘图,循环...进行修补)和/或交互方式创建绘图的任何评论?
丹尼斯,2015年

8

我通常使用gnuplot。这可能很难学习,但是会产生非常干净的情节。还可以将其设置为以封装后记格式(.eps)生成图,从而可以轻松地嵌入到编写的文档中。LATEX


+1和快速绘图请尝试使用qtiplot,它是一个很好的原点克隆,也可以进行曲线拟合。也适用于最终布局xfig非常好(但很难),并且可以将乳胶配方直接嵌入细节中……
Karussell 2012年

8

另一个要考虑的软件包是Asymptote。渐近线实际上是一种生成基于矢量的输出的编程语言(具有类似于C ++的语法)。一个不错的功能是使用LaTeX渲染文本(包括数学方程式),因此图形中的文本与文档一致。

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

无论如何,渐近线的输出质量确实不错。

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


8

让我对Mathematica的图形功能进行简短回顾,因为这是我所熟悉的。

它能做什么?

要查看示例,请查看Wolfram网站上的Mathematica代码库。这不是专门针对可视化,而是几乎所有示例都包含一些绘图。

您也可以浏览Mathematica.SE绘图(基本)和 图形(更高级)标签。

可以以全自动方式创建示例图像(无需手动后处理)。

长处

  • 所有图形都以声明性方式指定(例如SVG-,您无需告诉系统绘制内容,只需列出矢量图形对象即可)。图形与系统中的其他任何东西都是相同的Mathematica表达式,它们只是以一种特殊的方式显示。这意味着图形在创建后就可以轻松地进行转换和处理-这也适用于通过绘制函数制作的图形。

  • 创建图形的快速简便方法是使用高级绘图功能,并设置许多选项以自定义其输出。如果没有所需的精确绘图功能,则可以从图形基元组合图形(这也很容易)。

  • 数学函数绘图功能非常出色。据我所知,它是一流的。Mathematica样本具有自适应功能(在2D和3D中均可用),因此可以快速自动生成平滑图。通过绘制函数可以象征性地检测到奇异性,不连续性等。

  • 您可以为特定的打印尺寸生成图形,并确保它们与出版物中的周围文本完全匹配(例如,字体大小和样式匹配)。在2D中,有两种坐标:与数据相对应的绘图坐标和在打印机点中指定的绝对坐标。前者在调整图形大小时会缩放,而后者则不会。默认情况下,文本使用绝对坐标,这意味着无论以7 cm或14 cm的大小导出同一图形,8点类型都将是8点。这样可以使字体大小与出版物中的文本一致。

  • 用于数学公式的内置排版。MATEX第三方软件包提供了优良的品质公式排版LaTeX的整合。(披露:我是作者。)

  • 您可以在同一系统中进行所有数据处理。通常,只需做一些工作,整个图形创建过程就可以自动化(甚至是一些高级方面),而无需像Adobe Illustrator这样的软件进行手动后期处理。当您在最后一分钟发现一些小问题并需要重新生成图形时,这一点很重要。

弱点

  • 具有几个副区附图具有的副区的坐标系统之间的一些精确对准可能是困难的。

    所述SciDraw(第三方)包修复此,并给出了该图的各个方面的详细控制。此方案的权衡之处在于需要花费更多的精力来设置数据。

  • 3D图形无法很好地导出为矢量格式。不过,导出位图版本也可以。

  • 如果您的机构尚未获得许可证,则会花费金钱。



5

深入研究PGF图:

1)可以做3D图表:python-matplotlib不能做,gnuplot比较难看

2)具有一致的字体大小家庭与基础文档)

3)可以针对特定的颜色进行模板化

市场上没有其他类似的东西。:)


1
matplotlib具有3D图形实用程序。它有点薄弱,但对于快速可视化当然可以正常工作。
meawoppl 2012年

绝对+1。当涉及到出版质量图时,没有人能胜过它。无耻的插件:TeX.sx上pgfplots的一个问题和我的答案:tex.stackexchange.com/search? q=user: 9043+[pgfplots]。有关示例,请参见texample.net/tikz/examples/pgfplots非常全面的手册
qubyte

使用PGF-plots,我只有一个问题,即您不能假定发布者支持它。如果您的工作流程依赖它,您将怎么办?我曾经通过首先对数字进行排版,然后将结果输出包括到不再依赖于PGF绘图的主文件中来结束,这确实不是很方便。有没有更聪明的方法?
Christian Waluga 2014年

1
@ChristianWaluga:您可以使用“独立”类-这使您可以使用为文章准备的PGF图片创建PDF / EPS图像。然后,您可以将PDF插入带有includegraphics的原始文章文本中。
tmaric 2014年

4

我发现Tecplot在数据可视化和数据处理方面非常强大。


4
Tecplot如何使它功能强大?您觉得哪些功能特别有用?
保罗

4

我将基于有限的经验(仅涵盖几种类型的图)向您介绍我的观点:2D数据图,散点图和基于图的图(树和图,流程图);但首先请允许我稍微偏离一下这个问题:

首先,我想说的是,产生高质量地块的重要性常常被忽视。绘图不仅用于显示数据,而且如果有效使用,它们还可以传达复杂的想法,而这些想法通常无法用文本清楚地表达出来。在我看来,这不是讨论好的情节的构成,优点和缺点的适当地方,但如果有兴趣,请看这里

其次,我更后悔使用半熟的情节而不是花时间在高质量的情节上。原因是,一个坏的情节可以你,例如,如果使用做一个快速过目数据,你可能没有正确归一化,或使用不那么好的地块做视觉上的比较一个半生不熟的情节(眼睛通常可能非常宽容或非常误导)。因此,我总是建议准备绘图,就像将其显示给不熟悉结果的人一样。这样可以节省您的时间并改善您的工作。此外,您还可以享受到演讲材料将为下一次演讲/研讨会/论文准备的更多好处。

现在回答这个问题

以我的经验,最好将数据处理与实际的绘图工具和图像处理工具分开。对于数据处理,我使用python,因为它非常灵活,而且我还没有找到无法通过python轻松处理的文件格式。而且,numpy和scipy库可以是用于数字数据的强大操作工具。

在python中,我还没有看到可以让您控制所有格式详细信息的绘图工具。我发现,当您在乳胶纸中格式化纸张时尝试整合图像时,细节会产生很大的不同。例如,对于matplotlib来说,控制空白和周围图的比例可能会让人头疼(并非不可能,但不值得我花时间),如果空间有限,这非常重要,因为在日记本和会议中经常如此文件。

以我的经验,我发现GNUPLOT是格式化和生成2D绘图和散点图的最佳工具。它非常让您可以控制绘图的所有细节。您可以生成黑白或彩色的高质量图(矢量图像)。高度的控制使GNUPLOT的学习更加困难,有时简单的事情可能会花一些工夫,但是如果您从一个示例开始,它可以简化事情。我通常会在这两个站点上寻找灵感,请访问不太常见的站点此处官方演示

有时,由GNUPLOT生成的图可能很大(在MB范围内),并且日记可能会拒绝文件(这在我身上发生了一些非常丰富多彩的散点图)。我使用过,我推荐Imagemagick,它是一个命令行工具,可让您转换,编辑和压缩图像(我用它来生成和编辑高质量jpeg,同时大大减小了文件大小)。我尝试了其他使用自动数据压缩的工具,由于图像伪影和压缩之间的微妙平衡,这被证明特别有问题。

我还制作了大量图表(通常用于演示)。我发现如果我要一次使用图表(而不是纸质),那么Keynote应用程序(OSX)并保存为pdf就足够了。但是,当多次使用图像时,显示质量更为重要,TikZ是我的首选工具。我发现TikZ有点难以使用,但是如果您从一个示例开始,它会容易得多。

最后,我从命令行完成大部分工作,以便集成与bash或python一起使用的不同工具。


3

我的快速投票是QtiPlot。

尽管它并不完美,但它提供了GUI简便性和python脚本编写的最佳组合,因此您真正要做的就是“ Qtiplot / Python /(Illustrator或Inkscape)”。Qtiplot是可扩展的,因此您可以创建自己的脚本/宏,这些脚本/宏可以运行python命令来打开和处理数据,然后将它们转储到表中。然后,您可以手动或自动绘制它们。也可以将其配置为与具有互联网可用的排版机或本地排版机的LaTeX排版一起使用,因此您可以将数学公式放入绘图标题/轴/标记中。

然后可以将绘图导出为所需的任何格式,但是最有效的格式无疑是SVG。如果需要,可以在inkscape中对SVG文件进行润饰,它也具有LaTeX排版功能。

MatPlotLib很棒,但最大的缺点是必须对所有内容进行手动编码(就像任何脚本绘制解决方案一样)。QtiPlot很棒,因为您可以使用强大的Python功能脚本化/自动化数据处理和绘图,然后将粗略图传递到gui,这将允许您手动调整它并进行各种gui剪切/粘贴/操作逐案进行数据分析的速度要快得多。您还可以使用脚本精确设置尺寸,还可以使用GUI操作尺寸,这是matplotlib不能做到的。

我想这取决于您对QtiPlot绘图解决方案的看法。我发现它非常有能力,但是学习曲线都很陡峭。


3

令我惊讶的是,还没有人提到NicoSchlömer出色的工具matlab2tikzmatplotlib2tikz。如果您使用LaTeX进行文档准备,而使用Matlab或Python进行数据处理,则可以轻松获得高质量的矢量图,然后将其发布到您的心中:

  1. 使用Matlab或Python准备您的绘图,包括轴,标签,图例等。不必担心TeX格式。
  2. 致电matlab2tikz('figure.tex')(或matplotlib2tikz)。
  3. 编辑figure.tex以品尝(用适当的数学替换标签文本,更改颜色,线宽,图例位置,轴样式等),请参阅pgfplots手册(或TeX stackexchange有关pgfplots的许多问题)。
  4. 在您的图中includegraphics,放置而不是,\input{figure.tex}(不要忘了\usepackage{pgfplots}在序言中添加它)。
  5. 对于提交,请使用外部化库(请参见手册的第7章)将图形转换为pdf并仅替换\input{figure.tex}\includegraphics{figure.pdf}

2

如果您不想要脚本,请看一下MagicPlot。它不像Origin那样功能丰富(例如只能生成2D图),但是我从未遇到线宽和其他属性的问题。尽管重绘速度足够快,但绘图还是很好的抗锯齿功能。加上有用的配件。


0

Tecplot 360非常适合处理大数据并生成具有出版质量的绘图。它具有强大的加载项和脚本接口来处理数据。在我看来,它可以完成后期处理所需的一切。

一个常见的错误是求助于使用Excel。不会。它不记得布局,X范围,颜色图。它没有动画。它使用难看的笨重的电子表格来处理数据。

当然,您不会找到同时进行后处理和文本编辑的工具,而为出版物选择合理的文本编辑器是另一个重要的问题。不要使用MS Word,其引用管理器很难看。我使用LyX或我正在使用的操作系统可用的任何其他Latex工具。

哦,当您必须发布PDF时,请包含指向LaTeX,Word或任何具有可读数学的格式的链接。在PDF中,不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.