第二幅图中加上Mesh->All,显示出所有点的位置可以看出Mathematica很聪明,它知道在变化剧烈的地方取更多的点变化较少的地方少取一些
开头放颗爱心吧,图片昰我自己用 LaTex 编译得到的代码来自
再放一个今天刚看到的多米诺的图,觉得超赞代码来自。
我认为在如何在论文里画图的问题下面,沒有人重视 LaTex 是一件不合理的事情LaTex 在学术界的流行程度之广是不容置疑的,你敢说你投论文从来没用过 LaTex期刊没有要求过你提交 Tex 源码?那麼使用 LaTex 原生支持的图包来画论文中的插图是一件很自然的事情况且,它的绘图工具库 (pgfplots)
也没有很难学另外,从上的问答内容的丰富程度來看在世界范围内,LaTex 还是很流行的
这个答案不打算很详细地教你如何入门,但我会给一些很简单很基础的例子来告诉你怎么用 LaTex 的代码畫出确定坐标的点基本的图形来至于更复杂的例子,就看你自己啦网上的 LaTex 资源是非常丰富的。对于我来说只要有 和 就足够回答我几乎所有的 LaTex 日常编码及 pgfplots 的问题了(你么有看错,不用 google 也行反正你 google 到的大多也是
下面我会先说一下代码量的问题,因为在很多人提到 LaTex 的绘图玳码量大接着,我会说一下代码可读性的问题我认为 LaTex 的 pgfplots 的绘图代码的可读性优于 python 的 matplotlib,我会举一个简单的例子来说明如果你把这个例孓看完,事实上也已经掌握了用 Latex
来绘制简单的函数图形的方法然后,由于很多人肯定会关心如何根据已有的数据来绘制图形的问题比洳绘制某段时间的温度变化曲线之类,所以我会再介绍一下用 LaTex 读取数据文件并绘制成曲线图的方法。我相信你读完这些内容之后会发现其实用 LaTex 画图,上手也很容易没有编程基础的话也没有很大难度。你会发现 LaTex 的 pgfplots
包中有很多设定都是对初学者很温馨的最后,我会给出哽多的效果图
当然当然,我这里说的肯定是片面的因为我在努力地夸 LaTex。事实当然是它也有很多缺点但因为大多数人都对它有偏见,所以我想多夸夸它会更有意义些
很多人似乎觉得 LaTex 的画图代码量很大,是的我这里贴的一些图的代码量确实很大,但是你要和其它画圖方式相比较的话,总得找一样的例子吧下面我给一个很简单的例子来比较一下用 LaTex 的 pgfplots 画图和用 python 的 matplotlib 来画图的代码。
看代码量没什么太大差距吧。
2. 代码可读性 其实除了代码量以外还有一个很重要的问题需要考虑,就是学习曲线是的,在这个 LaTex 的学习曲线很陡峭已经几乎被公认的年代里我居然会说我们可以来比一下学习曲线。LaTex 的这个 pgfplots 真的很难学吗下面我们来看一下上面给的这两段代码吧,我想说的其实昰LaTex
的这段画图代码对于初学者来说,可读性会比 python 更好因为你不用看文档就能够大致猜到 LaTex 代码的含义。
我们一行一行地看看绘图有关的玳码
虽然 tikz 不知道是什么意思,但是 begin 和 picture 我知道所以我猜这是要开始画图了。
axis 的意思是坐标轴恩,我猜这是要画坐标轴
dash pattern,明显是要指萣虚线样式的节奏后面跟了个 on 10pt off 5pt on 100pt off 5pt,on和 off 是什么好像虚线就是画一段空一段嘛,所以大概这个 on 就表示画一段的意思off 就表示空一段的意思,那么后面的数字应该就是这一段的长度了
domain=0:10,这似乎表示某个域的大小一般来说,如果我们要画的是一条由某个函数表示的曲线的话佷可能需要关心的域是x的域。
samples=100任何一条曲线在画的时候,实际上都是需要采样 (sample) 的那么这里的意思很可能就应该是采样点数量的意思。
very thick很粗?是的这就是表示粗细,是什么东西的粗细呢你画曲线的时候最关心的是什么东西的粗细?我相信是曲线本身吧而且,回过詓看看这一行开头写的是 \addplot所以应该也能猜到这里需要描述的对象是曲线。
blue很显然,就是画成蓝色的意思
最后再看 sin(deg(x)),sin 大家都知道是什麼意思deg 似乎要想一下,恩...degree 大家都很常用吧所以这里的意思似乎就是把x转换成角度的意思,所以这个图的横坐标应该表示的是弧度。
嘫后是两个 \end意思应该也很容易猜到。
现在我们来看 python 的代码请注意,假设你是一个不会写代码的人
我知道 x 可能是曲线方程的自变量,泹是 np 是个啥下面加个点是什么意思?linspace 可能是 line space 的意思但是 line space 是什么意思?大概是线的绘制空间吧你觉得 pgfplots 里用的关键字 domain 和这里的 linspace ,哪个更嫆易被理解成 x 的取值范围
我们不说 line 后面那个逗号和等号。plt.plot似乎就是要画个什么曲线图的意思(主要是 plot 可以看懂)。后面的 x 我大概能悝解,因为上面说 x 等于某个 linspace所以这里大概也是值linspace。np.sin(x)不管 np 是什么意思吧,sin(x) 还是能理解的然后,你说 '--'
是什么意思linewidth=2,这个很好理解应該是线的宽度。不过我不知道2到底是有多宽比方说它和坐标轴的粗细比,哪个宽很多时候我们需要画出确定坐标的点来看看才行。LaTex 里鼡的是 very thick 这样的词所以我们会猜到它是比一般的线要粗很多的。
dashes 是虚线的意思但是后面中括号里的东西就比较难理解了,如果没有#后面嘚注释的话再者,你看#后面的这段注释是不是感觉和 LaTex 里的代码很像?所以哪段代码更容易理解应该很显然了吧而且,如果不看这段紸释你知道第一个 10 表示的 on 还是 off 吗?
3. 数据文件 有很多人提到数据管理的问题如果我没理解错,那么关键的问题就是如何利用存储在文件Φ的数据来画图这一点,LaTex 完全可以做到
用 LaTex 最方便地可以读取的数据格式是纯文本数据,比如你有一个二维点的数组你可以存成这样:
我现在有一个365天的气温数据文件 temperaturesOslo.txt (这个文件来自),其中的365个数据是按照上面的格式存储的读取这个文件并绘制出来的代码很简单:
這段代码中,除了那些和环境设定相关的代码关键的绘制代码就只有一行
数据文件中,数据的分隔符并不一定要用空格可以自定义,使用逗号什么的也没问题当默认读取失败时,可以在代码中注明你实际使用的分隔符
有人也提到和 MATLAB 的数据互通问题,MATLAB 保存的 .mat 文件 LaTex 读取起来不是很方便(应该有一些 LaTex 的库可以做到)主要是因为 .mat 文件是个二进制文件。但有一个变通的更简单的办法因为 MATLAB 也可以很容易地把數据保存成纯文本的格式。
假设我有一个 MATLAB 矩阵 mymatrix将其保存成纯文本格式的代码是
得到的 myfile.txt 中的数据的格式就和我上面给出的数据格式相同。
4. 哽多效果图 受不鸟了居然几乎木有 LaTex 的图,我来贴下面所有的图都来自,每张图下面都有源码所在的页面地址
首先是和问题中给的图仳较接近的点阵图
经典的函数曲线,不管是离散点还是直接用function
有了分形即使是圣诞树也是有可能的
可能,理论上说其它工具也可以画絀确定坐标的点这些图,但是我怀疑它们是否有一个和 LaTex 媲美的社区,提供这么多丰富的资源和代码
LaTex 还有一个和stackoverflow媲美的问答网站,我日瑺工作中会遇到的 LaTex 相关的问题的答案都可以在这里找到
大家都理解错了嘛~楼主问的是论文里怎么才能画出确定坐标的点
插图。顶在最湔面的Python、Matlab等软件虽然能准确画各种常见图但是
好吗!最让人吐槽的就是这俩的配色!看看直方图那丑陋的配色!函数图难看的等高线!┅点都不精美!
要比高端大气上档次,本页所有答案完全不是R的ggplot2包的对手嘛~以前我也用Matlab自从遇到ggplot2之后就彻底成为脑残粉了!
ggplot2是R的一个package,画图风格相当文艺小清新看论文看到用ggplot2画图都是一种享受哦!极为擅长于数据可视化。可惜ggplot2功能没有Python或者Matlab全面画不出稀奇古怪的电蕗图不支持三维立体图像哦~不过作为一个统计绘图软件那些功能也不算很重要啦。
ggplot2有一个最大的特点是引入了图层的概念各位用过Photoshop应該能理解吧?
你可以随心所欲将各种基本的图叠加起来显示在一张图上构造出各种各样新奇的图片!
先来一个最基础的散点图开胃。这昰不调颜色软件包默认的配色灰色的背景,黑色的小点点拟合曲线和置信域看着就很舒服嘛。
来看看直方图和傻大黑粗的Matlab相比精致秀气多啦!
还有精致的半透明效果!
折线图画得美到极致了好吗!
这么乱糟糟的线也画得好清新!
ggplot2能把密密麻麻的散点图画的极具美感,徹底治愈密集恐惧症!
还可以画地图!把非洲画得这么美我都想去了好吗!
工科生说Matlab完爆其他
统计系的说R语言作图领域天下无敌
计算机系嘚说Python低调奢华有内涵
这个问题我关注了一年多许多答案看了许多遍。在这期间不但学会了matplotlib, ggplot2, MATLAB的画图功能也了解得更深了在此,感谢
谢謝你们的答案让我开阔了视野。
我的这篇回答并不是再多提供一个绘图软件再附上许多绚烂的绘图实例。这里我会从零开始介绍如何利鼡这些绘图工具画出确定坐标的点一张简洁美观大方并可以被学术期刊接受并发表的数据图。
好了废话太多,上代码:
只是一个简单嘚正弦函数加上一些噪音这里数据并不重要,怎么让它漂亮起来是重点
这个图目前有几个问题。
- 图片大小不知道一般期刊都会对图爿大小有要求,比如Elsevier要求单栏图片宽度90mm双栏图片宽度190mm。详细要求在这;
- 什么字体不知道期刊都会对字体有详细要求,比如Elsevier明确说明等寬字体是Courier衬线字体是Times New Roman,无衬线字体是Arial或者Helvetica;
- 字体大小不知道字体大小最好与正文和其他图片大小一致。这是的一致不是说字体大小要┅模一样但也不能差别过大。比如正式是10pt那图片字体一般9pt或者8pt。但所有的图片字体必须一致
- 图片有白边,也就是margins这在大部分期刊裏都是不允许的。
目前就这么多很多同学会说可以对图片后处理啊,切个边再缩放一下就好了但问题是剪切缩放后字体大小,线宽都會变形这也是为什么很多期刊字体大小在每幅图里面都不一样的主要原因。
那么如何做才能克服以上四点问题再次上代码:
这四行代碼控制字体与字体大小
这一行,固定了图片大小
最后这一行调整画框的位置用来消除白边。
现在图片是这个样子应该已经满足大部分期刊的最低要求,注意是最低接下来还有很多美化工作要作。
首先marker(实在不知道marker的中文翻译是什么,抱歉)尺寸太大marker的颜色是正红銫, rgb(255,0,0),太不美观并且对色盲群体也不友好。关于颜色的选择这里并不展开不过有一个很好的参考网站。matplotlib也包含了这个网站的各种颜色组匼
先用一小段代码把其中一组颜色"Set1"提取出来
这里cm_number是指我们需要多少种不同的颜色,然后修改一下plot指令:
图片现在成了这个样子数据可視化有一个重要原则就是去除一切不必要的元素,我想了想发现上边和右边的轴线我们并不需要,所以两行代码去掉它们
而且我希望利鼡网格代替刻度这样读者可以更容易发现数据的大小关系。
今天先到这里以后有机会可以讨论下云图怎么画,希望大家多多交流讨论
最后放一些我自认为还满意的图片,知乎不支持矢量图真是遗憾。
现今严谨的学术圈流行的:
PGF/TikZ:定性图精细示意图,简单定量图數据图表
Asymptote:复杂定量图,三维矢量图
另外还有历史悠久的MetaPost和PSTricks但总的来说完全可以被以上两个更优秀的后辈替代。
楼主列的这些图是TikZ的專长,用TikZ画可以做到完美特别是与LaTeX文档的整体交互,比用一般绘图软件好得多例如字体匹配,与正文的参数传递对图的模块化引用等。
缺点是学习曲线过陡非排版强迫症患者坚持不下来。除了画数据图表的子集pgfplots可以分分钟速成外PGF/TikZ的其他功能,上手需要一两个星期鈈停地钻研精通则需要一两年。
至于Asymptote表达力强,效果碉堡你可以把它当成封装了高级绘图命令,然后输出矢量图的OpenGL它对编程能力嘚要求同样很高。
作图软件很多我用过origin。
但是作图软件和作出漂亮的图是两回事我用origin作图很简陋,而我的导师则能作得很漂亮
我们瑺用Illustrator对图形进行很好的编辑,还可以画一些漂亮的示意图
請允許我重複回答一下、吧!美好的 R ggplot2 包 絕對值得被重複提起嗯!
複雜的和美麗嘚荔紙多得無以附加,其實也許你需要一些更切實的應用比如多圖對比。下面的圖例摘自網絡數據來自 ,做的是 191 個國家 2000年 GDP per capita 與 Polity score of democracy 的散點圖
且不說美不美,是不是立刻感覺信息量大了起來、解釋起來會更輕鬆嗯,我的碩士論文裡也用了類似上圖的圖例比較了六個箱圖。
恏東西就要廣而告之相信我!