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

上传人:b****1 文档编号:2901278 上传时间:2023-05-05 格式:DOCX 页数:39 大小:2.17MB
下载 相关 举报
如何在论文中画出漂亮的插图.docx_第1页
第1页 / 共39页
如何在论文中画出漂亮的插图.docx_第2页
第2页 / 共39页
如何在论文中画出漂亮的插图.docx_第3页
第3页 / 共39页
如何在论文中画出漂亮的插图.docx_第4页
第4页 / 共39页
如何在论文中画出漂亮的插图.docx_第5页
第5页 / 共39页
如何在论文中画出漂亮的插图.docx_第6页
第6页 / 共39页
如何在论文中画出漂亮的插图.docx_第7页
第7页 / 共39页
如何在论文中画出漂亮的插图.docx_第8页
第8页 / 共39页
如何在论文中画出漂亮的插图.docx_第9页
第9页 / 共39页
如何在论文中画出漂亮的插图.docx_第10页
第10页 / 共39页
如何在论文中画出漂亮的插图.docx_第11页
第11页 / 共39页
如何在论文中画出漂亮的插图.docx_第12页
第12页 / 共39页
如何在论文中画出漂亮的插图.docx_第13页
第13页 / 共39页
如何在论文中画出漂亮的插图.docx_第14页
第14页 / 共39页
如何在论文中画出漂亮的插图.docx_第15页
第15页 / 共39页
如何在论文中画出漂亮的插图.docx_第16页
第16页 / 共39页
如何在论文中画出漂亮的插图.docx_第17页
第17页 / 共39页
如何在论文中画出漂亮的插图.docx_第18页
第18页 / 共39页
如何在论文中画出漂亮的插图.docx_第19页
第19页 / 共39页
如何在论文中画出漂亮的插图.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《如何在论文中画出漂亮的插图.docx》由会员分享,可在线阅读,更多相关《如何在论文中画出漂亮的插图.docx(39页珍藏版)》请在冰点文库上搜索。

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

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

经常看到别人论文中画出各种绚烂的插图,我想知道这些图都是用一些什么样的软件画出来的。

比如下面给出的几张,好吧,我承认有的并不那么绚烂,但用什么样的软件比较合适呢?

具体答案可以拓展到更为广远的作图领域。

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

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

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

首先是matplotlib的。

importnumpyasnp

importmatplotlib.pyplotasplt

 

x=np.linspace(0,10)

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

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

line.set_dashes(dashes)

plt.show()

接着是pgfplots的。

\documentclass{article}

\usepackage{pgfplots}

\begin{document}

 

\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的这个pgfplots真的很难学吗?

下面我们来看一下上面给的这两段代码吧,我想说的其实是,latex的这段画图代码对于初学者来说,可读性会比python更好,因为你不用看文档就能够大致猜到latex代码的含义。

我们一行一行地看看绘图有关的代码。

先来看看latex的。

\begin{tikzpicture}

虽然tikz不知道是什么意思,但是begin和picture我知道,所以我猜这是要开始画图了。

\begin{axis}

axis的意思是坐标轴,恩,我猜这是要画坐标轴。

\addplot[dashpattern=on10ptoff5pton100ptoff5pt,domain=0:

10,samples=100,verythick]{sin(deg(x))};

plot,这个词我在韦伯词典里查到它的意思是:

3a:

tolocate(apoint)bymeansofcoordinatesb:

tolocate(acurve)byplottedpointsc:

torepresent(anequation)bymeansofacurvesoconstructed。

所以理解应该没难度吧。

dashpattern,明显是要指定虚线样式的节奏,后面跟了个on10ptoff5pton100ptoff5pt,on和off是什么?

好像虚线就是画一段空一段嘛,所以大概这个on就表示画一段的意思,off就表示空一段的意思,那么后面的数字应该就是这一段的长度了。

domain=0:

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

samples=100,任何一条曲线在画的时候,实际上都是需要采样(sample)的,那么这里的意思很可能就应该是采样点数量的意思。

verythick,很粗?

是的,这就是表示粗细,是什么东西的粗细呢?

你画曲线的时候最关心的是什么东西的粗细?

我相信是曲线本身吧。

而且,回过去看看这一行开头写的是\addplot,所以应该也能猜到这里需要描述的对象是曲线。

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

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

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

现在我们来看python的代码,请注意,假设你是一个不会写代码的人。

x=np.linspace(0,10)

我知道x可能是曲线方程的自变量,但是np是个啥?

下面加个点是什么意思?

linspace可能是linespace的意思,但是linespace是什么意思?

大概是线的绘制空间吧。

你觉得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里用的是verythick这样的词,所以我们会猜到它是比一般的线要粗很多的。

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

dashes是虚线的意思。

但是后面中括号里的东西就比较难理解了,如果没有#后面的注释的话。

再者,你看#后面的这段注释,是不是感觉和latex里的代码很像?

所以哪段代码更容易理解应该很显然了吧。

而且,如果不看这段注释,你知道第一个10表示的on还是off吗?

以上。

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

受不鸟了,居然几乎木有latex的图,我来贴。

下面所有的图都来自TeX,每张图下面都有源码所在的页面地址。

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

Drawinglatticepointsandvectors

经典的函数曲线,不管是离散点还是直接用function

Pgfplots|TikZexample

Animateddefiniteintegral

三维的

Sphericalandcartesiangrids

Membrane-likesurface

网络结构也没问题

Scientificinteractions

经典物理力学

Freebodydiagrams

化学的

RNAcodonstable

元素周期表也是可以的

PeriodicTableofChemicalElements

电路

Powerelectronics

如果你想要一个示波器

TeXtronicsoscilloscope

光学

Polarizingmicroscope

分形也没什么啦

Lindenmayersystems

有了分形,即使是圣诞树也是有可能的

Christmasfractaltree

手绘风格

Simulatinghand-drawnlineswithTikZ

还有Art

Sunset|TikZexample

Poppyflower

ModernizedIslamicArt

Mandala|TikZexample

可能,理论上说,其它工具也可以画出这些图,但是,我怀疑它们是否有一个和latex媲美的社区,提供这么多丰富的资源和代码。

latex还有一个和stackoverflow媲美的问答网站,我日常工作中会遇到的latex相关的问题的答案,都可以在这里找到TeX-LaTeXStackExchange

2014-04-2011条评论感谢分享收藏•没有帮助•举报

更多回答

1250

知乎用户,人都是平庸的...

收起

知乎用户、知乎用户、Tiotao等人赞同

强烈推荐Python的绘图模块matplotlib:

pythonplotting。

画出来的图真的是高端大气上档次,低调奢华有内涵~适用于从2D到3D,从标量到矢量的各种绘图。

能够保存成从eps,pdf到svg,png,jpg的多种格式。

并且Matplotlib的绘图函数基本上都与Matlab的绘图函数名字都差不多,迁移的学习成本比较低。

开源免费。

如图所示(题目描述中的图在最后):

(以下图片均引用自Thumbnailgallery)

像这种普通的函数图象:

plt.fill(x,y1,'b',x,y2,'r',alpha=0.3)

以及这种Scatter图(中文不知道该怎么说…):

plt.scatter(x,y,s=area,alpha=0.5)

精致的曲线,半透明的配色。

都显出你那高贵冷艳的X格,最重要的是只需一行代码就能搞定。

从此以后再也不用忍受Matlab以及GNUPlot中那蛋疼的配色了。

想画3D数据?

没有问题(不过用mayavi可能更方便一些):

ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)

cset=ax.contourf(X,Y,Z,zdir='z',offset=-100,cmap=cm.coolwarm)

cset=ax.contourf(X,Y,Z,zdir='x',offset=-40,cmap=cm.coolwarm)

cset=ax.contourf(X,Y,Z,zdir='y',offset=40,cmap=cm.coolwarm)

四行代码你就能拥有(后三行是画坐标平面上的等高线,严格的额说还是一行)。

除此以外,不过你是矢量场,网络还是什么奇葩的需求都能够搞定:

plt.streamplot(X,Y,U,V,color=U,linewidth=2,cmap=plt.cm.autumn)

plt.colorbar()

plt.triplot(x,y,triangles,'go-')

plt.title('triplotofuser-specifiedtriangulation')

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公式的插入,当别人画的图还是这个样子的时候(以下图片引用自MatplotlibTutorial(译))

你能够把它变成这个样子:

如果再搭配上IPython作为运行终端(这张图是自己的~):

简直就是神器啊,有木有!

心动不如行动,还等什么?

(奉上教程一篇MatplotlibTutorial(译))

====Update:

2013-9-1818:

04====

经@许铖同学提醒,再补充一句,matplotlib还可以话xkcd风格的图呦~

(图片引用自网络)

此外结合IPythonNotebook后更多精彩内容,请看http:

//nbviewer.ipython.org/

====Update:

2013-9-1920:

04====

如果嫌安装麻烦并且恰好在Windows系统下的话可以尝试Python的一个发行版winpython-PortableScientificPython2/332/64bitDistributionforWindows。

====Update:

2013-10-123:

45====

鉴于@vanli同学质疑matplotlib是否能画出题目中所示的图像,我在这里将题目中的图像用matplotlib画出来如下:

代码在此处:

代码在此处:

关注问题115条评论感谢分享收藏•没有帮助•举报收起

375

张知洞

收起

李铮、知乎用户、知乎用户等人赞同

∙我喜欢用Mathematica画图,默认出图漂亮,自定义性好,支持常见各种类型的画图,能导出丰富的格式,动态交互和制作动画也很强大,还有一点:

Mathematica很数学,语法和数学上的习惯更接近,函数或方程作图只需输入表达式和范围即可,Matlab和Python中一般需要先手动离散化

∙Matlab的可视化也很强大,不过被吐槽较多的一点是线条有锯齿(这个和取的点多少无关,其实也能消掉)(

∙Python的matplotlib库我也用过,风格是模仿Matlab的,就默认绘图来说比Matlab好看(起码没锯齿),好处楼上已经有人说过了,但是并非没有缺点,使用matplotlib需要一点编程和Python基础,对于编程基础不好的同学来说入门会比其他的软件慢一点;matplotlib的2维绘图很好,但是3维绘图目前还比较差,各种绘图细节方面的可选项不算很丰富,不支持隐函数绘图(形如F(x,y,z)=0这种),性能也不好(如3D的scatter,大概1万个点就开始卡了,Mathematica和Matlab10万个点都不算卡),3维的用mayavi这个库可能更好

普通函数绘图只需输入表达式以及取值范围,真正的一行代码。

第二幅图中加上Mesh->All,显示出所有点的位置。

可以看出Mathematica很聪明,它知道在变化剧烈的地方取更多的点,变化较少的地方少取一些

Mathematica不仅支持Latex,还能直接写二维的公式以及把公式导出为Latex

不等式区域绘图,在Mathematica中使用RegionPlot很简单,但在Matlab和Matplotlib中有点麻烦

(下面这个是在极坐标下的)

绘制图表

下面是几个3D的,比较下Matlab和Python画的爱心

2行代码创建的Mengersponge

Matlab版:

Matlab软件环境下的Sierpinsk地毯及Sierpinski海绵

矢量场流线图

图论中的图

散点图

更多美图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2