内容转自知乎,鉴于原帖内容较长,只选择了被赞最多的两个答案进行分享,并稍作编辑。更多内容请移步原帖:http://www.zhihu.com/question/21664179/answer/21540943。
ggplot2是R的一个package,画图风格相当文艺小清新。看论文看到用ggplot2画图都是一种享受哦!极为擅长于数据可视化。可惜ggplot2功能没有Python或者Matlab全面,画不出稀奇古怪的电路图不支持三维立体图像哦~不过作为一个统计绘图软件那些功能也不算很重要啦。
ggplot2有一个最大的特点是引入了图层的概念,各位用过Photoshop应该能理解吧?你可以随心所欲将各种基本的图叠加起来显示在一张图上,构造出各种各样新奇的图片!
先来一个最基础的散点图开胃。这是不调颜色软件包默认的配色。灰色的背景,黑色的小点点。拟合曲线和置信域看着就很舒服嘛。
来看看直方图,和傻大黑粗的Matlab相比精致秀气多啦!
还有精致的半透明效果!
折线图画得美到极致了好吗!
ggplot2能把密密麻麻的散点图画的极具美感,彻底治愈密集恐惧症!
还可以画地图!把非洲画得这么美我都想去了好吗!
Network也能画!
散点图+误差区间!
极坐标柱状图!
强烈推荐 Python 的绘图模块 matplotlib: python plotting 。画出来的图真的是高端大气上档次,低调奢华有内涵~ 适用于从 2D 到 3D,从标量到矢量的各种绘图。能够保存成从 eps, pdf 到 svg, png, jpg 的多种格式。并且 Matplotlib 的绘图函数基本上都与 Matlab 的绘图函数名字都差不多,迁移的学习成本比较低。开源免费。如图所示(题目描述中的图在最后):
像这种普通的函数图象:
plt.fill(x, y1, 'b', x, y2, 'r', alpha=0.3)
以及这种 Scatter 图(中文不知道该怎么说…):
plt.scatter(x, y, s=area, alpha=0.5)
精致的曲线,半透明的配色。都显出你那高贵冷艳的X格,最重要的是只需一行代码就能搞定。
想画 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('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公式的插入,当别人画的图还是这个样子的时候
你能够把它变成这个样子:
如果再搭配上 IPython 作为运行终端:
简直就是神器啊,有木有!心动不如行动,还等什么?(奉上教程一篇 Matplotlib Tutorial(译))
(13级博士班,林鑫)