-
如何在论文中画出漂亮的插图?
很多人似乎觉得
latex
的画图代码量很大,是的,我这里贴的这些图的代
码量确实很大,
但是,
你要和其它画图方式相比较的话,
总得找一样的例子吧,
下面我给一个很简单的例子
来比较一下用
latex
的
pgfplots
画图和用
python
的
matplotlib
来画图的代码。
首先是
matplotlib
的。
import numpy as npimport as pltx =
ce(0,
10)line,
=
(x,
(x),
'--',
linewidth=2)dashes
=
[10,
5,
100,
5]
#
10
points
on,
5
off,
100
on,
5
_dashes(dashes)()
接着是
pgfplots
的。
documentclass{article}usepa
ckage{pgfplots}begin{document}begin{ti
k
zpicture}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}
看,代码量没什么太大差距吧。
<
/p>
其实,
除了代码量以外还有一个很重要的问题需要考虑,
就是学习曲线。
是的,
在这个
< br>
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
p>
就表示空一段的意思,那么后面的数字应该就是这一段的长度了。
domain=0:10
,
这似乎表示某个域的大小,
一般来说,
如果我们
要画的是一条由某个函数
表示的曲线的话,很可能需要关心的域是
x
的域。
samples=100
,任何一条曲线在画的时候,实际上都是需要采样
(sample)
的,那么这
里的意思很可能就应该是采样点数量的意思。
very thick
,很粗?是的,这就是表示粗细,是什么
东西的粗细呢?你画曲线的时候最关心
的是什么东西的粗细?我相信是曲线本身吧。而且
,回过去看看这一行开头写的是
addplot
,所以应该也能猜到这里需要描述的对象是曲线。
blue
,很显然,就是画成蓝色的意思。
最后再看
sin(deg(x))
,
sin
大家都知道是什么意思,
deg
似乎要想一下,
恩
...degree
大
家都很常用吧,所以这里的意思似乎就是把
< br>x
转换成角度的意思,所以,这个图的横坐标
应该表示的
是弧度。
然后是两个
end
,意思应该也很容易猜到。
现在我们来看
python
的代码,请注意,假设你是一个不会写代码的人。
x = ce(0, 10)
我知道
x
可能是曲线方程的自变量,
但是
np
是个啥?下面加个点是什么意思?
linspace
可能是
line space
的意思,但是
line space
是什么意思?大概是线的绘制空间吧。
你觉
得
pgfplots
里用的关键字
domain
和这里的
linspace
,哪个更容易被理解成
x
的取
值范围?
line, = (x, (x), '--',
linewidth=2)
我们不说
line
后面那个逗号和等号。
,似乎就是要画个什么曲线图的
意思(主要
是
plot
可以看懂)。后面的
x
,我大概能理解,因为上面说
x
等于某个
linspace
,所
以这里大概也是值
linspace
。
(x)
,
不管
p>
np
是什么意思吧,
sin(x)
还是能理解的。
然后,你说
'--'
是什么意思?
linewi
dth=2
,这个很好理解,应该是线的宽度。不过我不
知道<
/p>
2
到底是有多宽,比方说它和坐标轴的粗细比,哪个宽?很多时候
我们需要画出来看
看才行。
latex
里用的是
very thick
这
样的词,所以我们会猜到它是比一般的线要粗很多
的。
dashes = [10, 5, 100, 5] # 10 points
on, 5 off, 100 on, 5 off
dashes
是虚线的意思。
但是后
面中括号里的东西就比较难理解了,
如果没有
#
后面的注释
的话。再者,你看
#
后面的这段注释,是不是感觉和
latex
里的代码很像?所
以哪段代码更
容易理解应该很显然了吧。而且,如果不看这段注释,你知道第一个
10
表示的
on
还是
off
吗?
以上。
/******
下面是原来的答案
**
****/
受不鸟了,居然几乎木有
latex
的图,我来贴。下面所有的图都来自
,每
张图下面都有源码所在的页面地址。
首先是和问题中给的图比较接近的点阵图
Drawing lattice
points and vectors
经典的函数曲线,
不管是离散点还是直接用
function
Pgfplots | TikZ
example
Animated
definite integral
三维的
Spherical and cartesian
grids
Membrane-
like surface
网络结构也没问题
Scientific interactions
经典物理力学