如何在论文中画出漂亮的插图?
时间:2014-05-13 09:38:53  来源:  作者:simyjs  点击量:


      内容转自知乎,鉴于原帖内容较长,只选择了被赞最多的两个答案进行分享,并稍作编辑。更多内容请移步原帖:http://www.zhihu.com/question/21664179/answer/21540943。



1、利用R语言的ggplot2画图



       ggplot2是R的一个package,画图风格相当文艺小清新。看论文看到用ggplot2画图都是一种享受哦!极为擅长于数据可视化。可惜ggplot2功能没有Python或者Matlab全面,画不出稀奇古怪的电路图不支持三维立体图像哦~不过作为一个统计绘图软件那些功能也不算很重要啦。



       ggplot2有一个最大的特点是引入了图层的概念,各位用过Photoshop应该能理解吧?你可以随心所欲将各种基本的图叠加起来显示在一张图上,构造出各种各样新奇的图片!



1.jpg



        先来一个最基础的散点图开胃。这是不调颜色软件包默认的配色。灰色的背景,黑色的小点点。拟合曲线和置信域看着就很舒服嘛。



2.jpg



      来看看直方图,和傻大黑粗的Matlab相比精致秀气多啦!



3.jpg



      还有精致的半透明效果!

7.jpg8.jpg



      折线图画得美到极致了好吗!



9.jpg 
 
 
 
        ggplot2能把密密麻麻的散点图画的极具美感,彻底治愈密集恐惧症!

10.jpg11.jpg12.jpg



        还可以画地图!把非洲画得这么美我都想去了好吗!





13.jpg



      Network也能画!

14.jpg



      散点图+误差区间!



15.jpg



      极坐标柱状图!





16.jpg





2、利用Python画图





      强烈推荐 Python 的绘图模块 matplotlib: python plotting 。画出来的图真的是高端大气上档次,低调奢华有内涵~ 适用于从 2D 到 3D,从标量到矢量的各种绘图。能够保存成从 eps, pdf 到 svg, png, jpg 的多种格式。并且 Matplotlib 的绘图函数基本上都与 Matlab 的绘图函数名字都差不多,迁移的学习成本比较低。开源免费。如图所示(题目描述中的图在最后):

      像这种普通的函数图象:



1.jpg


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


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


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


       精致的曲线,半透明的配色。都显出你那高贵冷艳的X格,最重要的是只需一行代码就能搞定。从此以后再也不用忍受 Matlab以及GNUPlot 中那蛋疼的配色了。

       想画 3D 数据?没有问题 (不过用 mayavi 可能更方便一些):

3.jpg


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) 


       四行代码你就能拥有(后三行是画坐标平面上的等高线,严格的额说还是一行)。除此以外,不过你是矢量场,网络还是什么奇葩的需求都能够搞定:

4.jpg


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


5.jpg


plt.triplot(x, y, triangles, 'go-') plt.title('triplot of user-specified triangulation') plt.xlabel('Longitude (degrees)') plt.ylabel('Latitude (degrees)') 




6.jpg


ax = plt.subplot(111, polar=True) bars = ax.bar(theta, radii, width=width, bottom=0.0) 


        这还没完,Matplotlib 还支持Latex公式的插入,当别人画的图还是这个样子的时候

7.jpg




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

8.jpg



      如果再搭配上 IPython 作为运行终端:

9.jpg

       简直就是神器啊,有木有!心动不如行动,还等什么?(奉上教程一篇 Matplotlib Tutorial(译)



                                                                                                              (13级博士班,林鑫)

最近更新

点击排行