如何在论文中画出漂亮的插图?

2019-03-09 23:16

经常看到别人论文中画出各种绚烂的插图,我想知道这些图都是用一些什么样的软件画出来的。比如下面给出的几张,好吧,我承认有的并不那么绚烂,但用什么样的软件比较合适呢?具体答案可以拓展到更为广远的作图领域。

知乎用户,计算图形学和计算机视觉,努力学以致用

知乎用户、李嘉、钱钱 等人赞同

很多人似乎觉得 latex 的画图代码量很大,是的,我这里贴的这些图的代码量确实很大,但是,你要和其它画图方式相比较的话,总得找一样的例子吧,下面我给一个很简单的例子来比较 一下用latex 的 pgfplots 画图和用 python 的 matplotlib 来画图的代码。

首先是 matplotlib 的。

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(0, 10)

line, = plt.plot(x, np.sin(x), '--', linewidth=2)

dashes = [10, 5, 100, 5] # 10 points on, 5 off, 100 on, 5 off line.set_dashes(dashes)

plt.show()

接着是 pgfplots 的。

\\documentclass{article} \%usepackage{pgfplots} \\begin{document}

\\begin{tikzpicture} \\begin{axis} \\addplot [dash pattern=on 10 off 5 on 100 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 on 100pt off 5pt, domain=0:10, samples=100, very thick] {sin(deg(x))};

plot,这个词我在韦伯词典里查到它的意思是:3 a: to locate (a point) by means of coordinates b: to locate (a curve) by plotted points c: to represent (an equation) by means of a curve so constructed。所以理解应该没难度吧。

dash pattern,明显是要指定虚线样式的节奏,后面跟了个 on 10pt off 5pt on 100pt off 5pt,on和 off 是什么?好像虚线就是画一段空一段嘛,所以大概这个o n就表示画一段的意思,off 就表示空一段的意思,那么后面的数字应该就是这一段的长度了。

domain=0:10,这似乎表示某个域的大小,一般来说,如果我们要画的是一条由某个函数表示的曲线的话,很可能需要关心的域是x的域。

samples=100,任何一条曲线在画的时候,实际上都是需要采样 (sample) 的,那么这里的意思很可能就应该是采样点数量的意思。 very thick,很粗?是的,这就是表示粗细,是什么东西的粗细呢?你画曲线的时候最关心的是什么东西的粗细?我相信是曲线本身吧。而且,回过去看看这一行开头写的是 \\addplot,所以应该也能猜到这里需要描述的对象是曲线。

blue,很显然,就是画成蓝色的意思。

最后再看 sin(deg(x)),sin 大家都知道是什么意思,deg 似乎要想一下,恩...degree 大家都很常用吧,所以这里的意思似乎就是把x转换成角度的意思,所以,这个图的横坐标应该表示的是弧度。

然后是两个 \\end,意思应该也很容易猜到。

现在我们来看 python 的代码,请注意,假设你是一个不会写代码的人。 x = np.linspace(0, 10)

我知道 x 可能是曲线方程的自变量,但是 np 是个啥?下面加个点是什么意思?linspace 可能是 line space 的意思,但是 line space 是什么意思?大概是线的绘制空间吧。你觉得 pgfplots 里用的关键字 domain 和这里的 linspace ,哪个更容易被理解成 x 的取值范围?

line, = plt.plot(x, np.sin(x), '--', linewidth=2)

我们不说 line 后面那个逗号和等号。plt.plot,似乎就是要画个什么曲线图的意思(主要是 plot 可以看懂)。后面的 x ,我大概能理解,因为上面说 x 等于某个 linspace,所以这里大概也是值linspace。np.sin(x),不管 np 是什么意思吧,sin(x) 还是能理解的。然后,你说 '--' 是什么意思?linewidth=2,这个很好理解,应该是线的宽度。不过我不知道2到底是有多宽,比方说它和坐标轴的粗细比,哪个宽?很多时候我们需要 画出来看看才行。latex里用的是 very thick 这样的词,所以我们会猜到它是比一般的线要粗很多的。

dashes = [10, 5, 100, 5] # 10 points on, 5 off, 100 on, 5 off

dashes 是虚线的意思。但是后面中括号里的东西就比较难理解了,如果没有#后面的注释的话。再者,你看#后面的这段注释,是不是感觉和latex里的代码很像?所 以哪段代码更容易理解应该很显然了吧。而且,如果不看这段注释,你知道第一个 10 表示的 on 还是 off 吗?

以上。

/******下面是原来的答案******/

受不鸟了,居然几乎木有latex的图,我来贴。下面所有的图都来自TeXample.net,每张图下面都有源码所在的页面地址。

首先是和问题中给的图比较接近的点阵图


如何在论文中画出漂亮的插图?.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版六年级下册《文言文两则》课时备课(表格)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: