资源描述:
《如何在论文中画出漂亮的插图?》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、经常看到别人论文中画出各种绚烂的插图,我想知道这些图都是用一些什么样的软件画出来的。比如下面给出的几张,好吧,我承认有的并不那么绚烂,但用什么样的软件比较合适呢?具体答案可以拓展到更为广远的作图领域。知乎用户,计算图形学和计算机视觉,努力学以致用知乎用户、李嘉、钱钱等人赞同很多人似乎觉得latex的画图代码量很大,是的,我这里贴的这些图的代码量确实很大,但是,你要和其它画图方式相比较的话,总得找一样的例子吧,下面我给一个很简单的例子来比较一下用latex的pgfplots画图和用python的matplotlib来画图的代码。首先
2、是matplotlib的。importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,10)line,=plt.plot(x,np.sin(x),'--',linewidth=2)dashes=[10,5,100,5]#10pointson,5off,100on,5offline.set_dashes(dashes)plt.show()接着是pgfplots的。documentclass{article}usepackage{pgfplots}begin{docume
3、nt}begin{tikzpicture}begin{axis}addplot[dashpattern=on10off5on100off5,domain=0:10,samples=100,verythick,blue]{sin(deg(x))};end{axis}end{tikzpicture}end{document}看,代码量没什么太大差距吧。其实,除了代码量以外还有一个很重要的问题需要考虑,就是学习曲线。是的,在这个latex的学习曲线很陡峭已经几乎被公认的年代里,我居然会说我们可以来比一下学习曲线。latex的
4、这个pgfplots真的很难学吗?下面我们来看一下上面给的这两段代码吧,我想说的其实是,latex的这段画图代码对于初学者来说,可读性会比python更好,因为你不用看文档就能够大致猜到latex代码的含义。我们一行一行地看看绘图有关的代码。先来看看latex的。begin{tikzpicture}虽然tikz不知道是什么意思,但是begin和picture我知道,所以我猜这是要开始画图了。begin{axis}axis的意思是坐标轴,恩,我猜这是要画坐标轴。addplot[dashpattern=on10ptoff5pto
5、n100ptoff5pt,domain=0:10,samples=100,verythick]{sin(deg(x))};plot,这个词我在韦伯词典里查到它的意思是:3a:tolocate(apoint)bymeansofcoordinatesb:tolocate(acurve)byplottedpointsc:torepresent(anequation)bymeansofacurvesoconstructed。所以理解应该没难度吧。dashpattern,明显是要指定虚线样式的节奏,后面跟了个on10ptoff5pton10
6、0ptoff5pt,on和off是什么?好像虚线就是画一段空一段嘛,所以大概这个on就表示画一段的意思,off就表示空一段的意思,那么后面的数字应该就是这一段的长度了。domain=0:10,这似乎表示某个域的大小,一般来说,如果我们要画的是一条由某个函数表示的曲线的话,很可能需要关心的域是x的域。samples=100,任何一条曲线在画的时候,实际上都是需要采样(sample)的,那么这里的意思很可能就应该是采样点数量的意思。verythick,很粗?是的,这就是表示粗细,是什么东西的粗细呢?你画曲线的时候最关心的是什么东西的粗
7、细?我相信是曲线本身吧。而且,回过去看看这一行开头写的是addplot,所以应该也能猜到这里需要描述的对象是曲线。blue,很显然,就是画成蓝色的意思。最后再看sin(deg(x)),sin大家都知道是什么意思,deg似乎要想一下,恩...degree大家都很常用吧,所以这里的意思似乎就是把x转换成角度的意思,所以,这个图的横坐标应该表示的是弧度。然后是两个end,意思应该也很容易猜到。现在我们来看python的代码,请注意,假设你是一个不会写代码的人。x=np.linspace(0,10)我知道x可能是曲线方程的自变量,但是
8、np是个啥?下面加个点是什么意思?linspace可能是linespace的意思,但是linespace是什么意思?大概是线的绘制空间吧。你觉得pgfplots里用的关键字domain和这里的linspace,哪个更容易被理解成x的取值范围?lin