python画图强还是matlab强_仅就作图而言,Python 和 MATLAB 有可比性吗?

matplotlib只是一个Python的包,还有那么多兄弟plotly,bokeh,vispy,moviepy……,当这些兄弟不存在?只说matplolib。matlab是一个超大型工业软件。

既然风向是只说matplolib,那就只说matplolib。

matplotlib提供更加底层的api,自定义程度更强(简单说matplotlib可以更骚,骚的代价就是学习成本比较高),matlab后面的版本来说默认主题或许更好看一点,以前版本的默认丑的要死,而且锯齿感很强,我想是它的渲染引擎的问题吧,实际上matplotlib可以通过一句

print(plt.style.available)

#这里会返回并打印出可用的主题包名称,需要的只有下面的那一句

plt.style.use('这里填自己想要的主题包名称')

#注意这一句要在所有的matplotlib的对象前,解释器运行的原因(没有优化)

就可以大量改属性。

关于performance的话,matplotlib只是一个Python包,性能有限,但是可以根据需求更改backend增加速度,教程:Usage - Matplotlib 2.0.2 documentation。并且有一个回答比较了三维的绘制的performance,建议不要使用matplotlib来绘制三维图,两个原因:1,丑,2,matplotlib主打的是二维绘图,三维仅仅只是补充,性能会很差。主要是渲染器的原因,根本没有使用专门三维渲染器,所以自然是渣渣,这样比较也太不公平了,不能说明问题,因为主打是二维,正如他的官网介绍的第一句:Matplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms.如果要画三维图,我推荐的是用python负责计算,导出计算结果,js负责可视化部分,现在能够和webgl比渲染引擎的,比表现能力的找不到吧。至于js库使用哪一个,其实这个挺随便的,因为即便来个弟弟来也足够秒这两个三维渣渣了,但是本着送佛送到西的精神推荐一个国产的echarts,这是百度的开源库已经到了4.0时代了,良心之作,颜值抗打ECharts Demo,只计算绘图部分的时间亚毫秒级。如果嫌麻烦直接使用plotly家族plotly,pyecharts(这是社区的做的,开发人员少,没办法,不是原生,骚的上限有限,但是够用了)吧。

学习成本的话,matplotlib学习的方法搞得人眼花缭乱,主要是各种博客太多了,干货太少了,我觉得学习路线图最好的是官方的Tutorials - Matplotlib 3.1.1 documentation,并且我推荐代码风格、绘制风格、思考风格使用oop,它能够表现出创作者的思想,风格,而且会让人更好的理解自己绘制的图是如何绘制的,能够让人思考一张图到底是什么,他由什么组成的,如何一步步构建。如果默认你有足够强的代码能力,阅读文档能力,我想一个下午就好了。matlab的话封装的很好,并且提供了足够好的gui来调节它的各种属性,还提供了其他的的功能,比如导出latex的tikz包格式的代码,所以学习成本相对来说很低,很人性化设计,对用户十分友好(总结:简单粗暴nobb,效果还很好)。值得一提的是,tikz包建议学学,用起来真的很快乐(快乐的意思就是很骚),其实如果考虑他的实际用起来有很多的ctrl-c和ctrl-v的话,代码量不是很多(好吧我承认还是挺多的,官方的文档教程虽然有一千多页,但是那是精通,精通的意思就是说可以画的图的种类完全不是上面这两货能够相提并论的,我们完全可以按照需求来学习,所以学习成本不是很高,扩展性几乎没几个能打的,而且基础语法很简单,掌握学习方法的话,估计3-5天能看完这1000+页,,而且什么图都能画,可以参考:http://www.texample.net/tikz/examples/,感受它的力量,在知道这个tex包之前的自己就好像对力量一无所知,更重要的是还可以当做学习英语哦,阅读理解能力,阅读速度都杠杠地提升,免费学习,省了多少学习资料得钱,学习的时间,算算账,四舍五入赚了一个亿)。

第三方包支持,matlab就在此不表,只针对绘图,matplotlib第三方包:Third party packages

最后在强调一下,如果默认两个都精通的话,最后导出的图片的效果,好不好看,我认为跟软件是什么没关系,那完全看人的审美。那是人的问题,不是工具的问题。(简单说:没有最骚的软件只有最骚的人,吃操作,不吃装备,不氪金)。

这是不切题的话,一个免费随便用,一个个人标准版永久授权license CNY 15500Pricing and Licensing,这还不包含升级服务,注意这还只是不包括各种工具的标准版,要包含工具的话那个钱海了去了。看在钱的面子上用谁心中没点6+7吗?还浪费生命思考这个问题。

这是对性能的补充说明:使用mayavi库,有时间做一些其他库的例子或者用webgl。这里没有做什么进一步美化设置,而且图片本身比较大,上传之后失真严重。

import mayavi.mlab as mlab

from numpy import mgrid

import numpy as np

import time

mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))

def fun(x, y):

return np.power(x, 2)+np.power(y, 2)

X,Y = mgrid[-2:2:400j,-2:2:400j]

Z = fun(X, Y)

print(X.shape, Y.shape, Z.shape)

t1 = time.time()

mlab.surf(X, Y, Z)

mlab.axes()

mlab.outline()

mlab.colorbar()

t2 = time.time()

print('take time {:.5f} seconds\n'.format(t2-t1))

mlab.show()

# take time 0.17752 seconds

这里再给一个plotly的,因为要翻译成js,所以相对较慢两秒多一点。

import plotly.graph_objects as go

from numpy import mgrid

import numpy as np

import time

def fun(x, y):

return np.power(x, 2)+np.power(y, 2)

X,Y = mgrid[-2:2:400j,-2:2:400j]

Z = fun(X, Y)

print(X.shape, Y.shape, Z.shape)

t1 = time.time()

fig = go.Figure(data = [go.Surface(x=X,y=Y,z=Z)])

t2 = time.time()

print('take time{:.5f}seconds\n'.format(t2-t1))

fig.show()

补充:这是echarts的,默认主题颜值最高,亚毫秒级渲染速度,视图使用perspective,使用的是canvas引擎,没有试过svg.

你可能感兴趣的:(python画图强还是matlab强_仅就作图而言,Python 和 MATLAB 有可比性吗?)