文档介绍:经常看到别人论文中画出各种绚烂的插图,我想知道这些图都是用一些什么样的软件画出来的。比如下面给出的几张,好吧,我承认有的并不那么绚烂,但用什么样的软件比较合适呢?具体答案可以拓展到更为广远的作图领域。知乎用户,计算图形学和计算机视觉,努力学以致用知乎用户、李嘉、钱钱等人赞同很多人似乎觉得 latex 的画图代码量很大,是的,我这里贴的这些图的代码量确实很大,但是,你要和其它画图方式相比较的话,总得找一样的例子吧,下面我给一个很简单的例子来比较一下用 latex 的pgfplots 画图和用 python 的matplotlib 来画图的代码。首先是 matplotlib 的。 import numpy asnp import asplt x=(0, 10) line, =(x, (x), '--', linewidth=2) dashes =[10, 5,100, 5]#10points on, 5off, 100 on, 5off (dashes) () 接着是 pgfplots 的。\documentclass{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis} \addplot [dash pattern=on 10off 5on100 off 5,domain=0:10, samples=100, very thick, blue] {sin(deg(x))}; \end{axis} \end{tikzpicture} \end{document} 看,代码量没什么太大差距吧。其实,除了代码量以外还有一个很重要的问题需要考虑,就是学习曲线。是的, 在这个 latex 的学习曲线很陡峭已经几乎被公认的年代里,我居然会说我们可以来比一下学习曲线。latex 的这个 pgfplots 真的很难学吗?下面我们来看一下上面给的这两段代码吧,我想说的其实是,latex 的这段画图代码对于初学者来说, 可读性会比 python 更好,因为你不用看文档就能够大致猜到 latex 代码的含义。我们一行一行地看看绘图有关的代码。先来看看 latex 的。\begin{tikzpicture} 虽然 tikz 不知道是什么意思,但是 begin 和picture 我知道,所以我猜这是要开始画图了。\begin{axis} axis 的意思是坐标轴,恩,我猜这是要画坐标轴。\addplot [dash pattern=on 10pt off 5pt on100pt off 5pt, domain=0:10, samples=100, very thick] {sin(deg(x))}; plot ,这个词我在韦伯词典里查到它的意思是: 3 a:tolocate (apoint) by means ofcoordinates b:tolocate (acurve) byplotted points c:to represent (an equation) bymeans ofacurve soconstructed 。所以理解应该没难度吧。 dash pattern ,明显是要指定虚线样式的节奏,后面跟了个 on10pt off 5pt on 100pt off 5pt ,on和off 是什么?好像虚线就是画一段空一段嘛,所以大概这个 on就表示画一段的意思,off 就表示空一段的意思,那么后面的数字应该就是这一段的长度了。 domain=0:10 ,这似乎表示某个域的大小,一般来说,如果我们要画的是一条由某个函数表示的曲线的话,很可能需要关心的域是 x的域。 samples=100 ,任何一条曲线在画的时候,实际上都是需要采样(sample) 的, 那么这里的意思很可能就应该是采样点数量的意思。 very thick ,很粗?是的,这就是表示粗细,是什么东西的粗细呢?你画曲线的时候最关心的是什么东西的粗细?我相信是曲线本身吧。而且,回过去看看这一行开头写的是\addplot ,所以应该也能猜到这里需要描述的对象是曲线。 blue ,很显然,就是画成蓝色的意思。最后再看 sin(deg(x)) ,sin 大家都知道是什么意思, deg 似乎要想一下, 恩...degree 大家都很常用吧,所以这里的意思似乎就是把 x转换成角度的意思,所以,这个图的横坐标应该表示的是弧度。然后是两个\end ,意思应该也很容易猜到。现在我们来看 python 的代码,请注意,假设你是一个不会写代码的人。 x=