如何在论文中画出漂亮的插图?
更新时间:2024-07-05 02:44:01 阅读量: 综合文库 文档下载
经常看到别人论文中画出各种绚烂的插图,我想知道这些图都是用一些什么样的软件画出来的。比如下面给出的几张,好吧,我承认有的并不那么绚烂,但用什么样的软件比较合适呢?具体答案可以拓展到更为广远的作图领域。
知乎用户,计算图形学和计算机视觉,努力学以致用
知乎用户、李嘉、钱钱 等人赞同
很多人似乎觉得 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,每张图下面都有源码所在的页面地址。
首先是和问题中给的图比较接近的点阵图
Drawing lattice points and vectors
经典的函数曲线,不管是离散点还是直接用function
Pgfplots | TikZ example
Animated definite integral
三维的
Spherical and cartesian grids
Membrane-like surface
网络结构也没问题
Scientific interactions
经典物理力学
Free
body diagrams
化学的
RNA
codons table
元素周期表也是可以的
Periodic Table of Chemical Elements 电路
Power
electronics
如果你想要一个示波器
TeXtronics oscilloscope 光学
Polarizing microscope
分形也没什么啦
Lindenmayer systems
有了分形,即使是圣诞树也是有可能的
Christmas fractal tree
手绘风格
Simulating hand-drawn lines with TikZ
还有Art
Sunset
除此以外,不过你是矢量场,网络还是什么奇葩的需求都能够搞定:
plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap=plt.cm.autumn) plt.colorbar()
plt.triplot(x, y, triangles, 'go-')
plt.title('triplot of user-specified triangulation') plt.xlabel('Longitude (degrees)')
plt.ylabel('Latitude (degrees)')
ax = plt.subplot(111, polar=True)
bars = ax.bar(theta, radii, width=width, bottom=0.0)
这还没完,Matplotlib 还支持Latex公式的插入,当别人画的图还是这个样子的时候(以下图片引用自Matplotlib Tutorial(译))
你能够把它变成这个样子:
如果再搭配上 IPython 作为运行终端(这张图是自己的~):
简直就是神器啊,有木有! 心动不如行动,还等什么?
(奉上教程一篇 Matplotlib Tutorial(译))
==== Update: 2013-9-18 18:04 ====
经@许铖同学提醒,再补充一句,matplotlib 还可以话 xkcd 风格的图呦~
(图片引用自网络)
此外结合 IPython Notebook 后更多精彩内容,请看http://nbviewer.ipython.org/
==== Update: 2013-9-19 20:04 ====
如果嫌安装麻烦并且恰好在 Windows 系统下的话可以尝试Python的一个发行版winpython - Portable Scientific Python 2/3 32/64bit Distribution for Windows。
==== Update: 2013-10-1 23:45 ====
鉴于@van li同学质疑 matplotlib 是否能画出题目中所示的图像,我在这里将题目中的图像用 matplotlib 画出来如下:
绘制图表
下面是几个3D的,比较下Matlab和Python画的爱心
http://www.cnblogs.com/qtsharp/archive/2012/03/24/2415147.html http://www.xue163.com/178/6/1787117.html
2行代码创建的
Menger sponge
Matlab版:Matlab软件环境下的Sierpinsk地毯及Sierpinski海绵
矢
量场流线图
图论中的
图
散点图
更多美图
http://www.51xuewen.com/group/513/topic_12635.htm
http://mathematica.stackexchange.com/questions/11880/animating-mathematica-se-logo
http://mathematica.stackexchange.com/questions/11350/xkcd-style-graphs2013-10-22
正在阅读:
如何在论文中画出漂亮的插图?07-05
那次我错怪了她作文600字06-20
我和长沙的2018作文400字07-13
07-08土力学考试试卷(B卷)答案07-17
犯罪学复习题完整版08-21
此生难忘作文600字07-10
含有月字的成语02-21
工程力学复习题101-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 插图
- 何在
- 文中
- 漂亮
- 人教版六年级下册《文言文两则》课时备课(表格)
- 浅论提高煤矿岩巷掘进机施工效率的有效途径
- 高中数学选修1-1)单元测试-第一章常用逻辑用语
- 哈尔滨市2014年高考申请享受照顾政策名单
- 福建省2012届高三质量检查试题数学理(word版)
- 地下防水方案
- 畜牧局局长在春耕备耕新闻发布会上的讲话稿
- 东师房地产法17春在线作业2
- 生鲜便利店项目创业计划书 - 图文
- 山东省文登第一中学2017-2018学年高二上学期暑期补习效果检测考
- 电磁线测试仪器市场现状调研及发展前景分析报告(目录)
- 港口建设项目预可行性研究报告和工程可行性研究报告编制办法
- 2017年中国柔性线路板现状分析及市场前景预测(目录) - 图文
- 第十章 中国在世界中当堂达标题
- 小学英语拓展型教学的实践与研究
- 热点 2017年全球人工智能政策十大热点
- 南昌县城市总体规划(2001-2020)
- 《金属学及热处理》复习习题及答案
- Linux排错troubleshooting
- 九年级历史下册第五课