相信不少读者都听说过Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh这五大工具。学习Python就是为了制作各种炫酷的可视化图表。本文将通过实测来深入评测这五个Python数据可视化库,看看这些工具有哪些优缺点,制作图表时如何选择。指标说明为了更清楚地了解绘图时这些用于可视化的Python的异同,本文将使用同一组数据制作多个系列的柱状图进行对比。将使用以下指标进行评估:data说明本文使用的数据是Pyecharts中的faker数据,来自pyecharts.fakerimportFakerx=Faker.choose()y1=Faker.values()y2=Faker.values()x是一个brandnames列,而y1/y2是一列无意义的等长数据的值,我们用不同的库来可视化这组数据!PyechartsEcharts是百度开源的数据可视化。凭借良好的交互性和精美的图表设计,得到了众多开发者的认可。另一方面,Python是一种非常适合数据处理的表达性语言。当数据分析遇上数据可视化,pyecharts诞生,支持30+图表。在pyecharts中制作条形图,首先需要导入相关的库frompyechartssimportoptionsasoptionsfrompyecharts.chartssimportBar,然后在不做任何调整的情况下绘制。首先,创建一个Bar实例,然后添加x轴和y轴数据。注意这里只接收列表格式的数据,最后加上标题和设置直接在notebook中显示。总体来说比较符合正常的绘图逻辑,整体代码量也不多。c=(Bar().add_xaxis(x).add_yaxis("商人A",y1).add_yaxis("商人B",y2).set_global_opts(title_opts=opts.TitleOpts(title="Pyecharts-Histogram",subtitle=""))).render_notebook()默认生成两个系列的直方图如下:可以看到,这个图支持交互显示和点击,默认生成的样式也比较漂亮,Pyecharts有详细的中文文档和demo,网上也有很多关于Pyecharts的讨论,刚接触的读者可以比较快的上手。当然,如果您对默认样式不满意,可以进行一些调整。由于文档非常完整,修改代码并不困难。比如可以修改主题,设置一些标记线,DataZoom,添加widgets等。总的来说,因为Pyecharts是基于Echarts的,所以生成的图表比较漂亮,官方中文文档对相关设置有说明很详细,关于Pyecharts的讨论也很多,所以如果你在使用过程中有相关问题,通过搜索很容易找到答案,可惜pandas中不支持使用series数据,需要转换到列表才可以使用,但总体来说是一个我很满意的可视化库。主观评分:85分MatplotlibMatplotlib应该是使用最广泛的Python可视化工具。它支持多种类型的图形。使用Matplotlib制作同样效果的图片,需要先导入相关库,不支持原生中文,所以需要设置中文显示importmatplotlib.pyplotaspltimportnumpyasnpplt.rcParams['font.sans-serif']=['SimHei']后面是画图,但是和pyecharts相比,大多是在写好的代码中添加数据,配置也不同。matplotlib大部分需要我们自己写代码,所以代码量可能会略多width=0.35x1=np.arange(len(x))fig,ax=plt.subplots()rects1=ax.bar(x1-width/2,y1,width,label='商户A')rects2=ax.bar(x1+width/2,y2,width,label='商人B')ax.set_title('Matplotlib—直方图')ax.set_xticks(x1)ax.set_xticklabels(x)ax.legend()plt.show()生成的最终默认图片如下。默认的配色方案不是很好看,但也不难看。看起来比较学术,但是不支持交互式的点击查看操作。虽然代码量有点多,但是由于Matplotlib的普及,网上关于matplotlib的资料要比Pyecharts多很多,所以编写和调整代码的过程并不复杂。主观总分77分。PlotlyPlotly也是一个非常强大的Python可视化库。Plotly具有完整的内置交互能力和编辑工具,支持在线和离线模式,提供稳定的API以便轻松集成现有应用程序,可以在网络浏览器中显示数据图表,还可以保存本地副本。但由于官方没有提供中文文档,所以关于Plotly的在线教程仅限于部分官方demo。一些详细的参数设置资料不多。首先导入相关库,设置notebook显示importplotlyimportplotly.offlineaspyimportplotly.graph_objsasgoplotly.offline.init_notebook_mode(connected=True)接下来是绘图代码。首先,必须处理数据。其余的基本配置其实和Pyecharts差不多。trace0=go.Bar(x=x,y=y1,name='商家A',)trace1=go.Bar(x=x,y=y2,name='商家B',)data=[trace0,trace1]layout=go.Layout(title={'text':"Plotly-Histogram",'y':0.9,'x':0.5,'xanchor':'center','yanchor':'top'})fig=go.Figure(data=data,layout=layout)py.iplot(fig)默认样式生成的图片如上,配色不难看,可以看出是支持交互操作的。同时默认添加了工具箱widget,查看更方便。支持30多种图形,总体来说还是比较不错的。一个可视化工具,但是如果你真的想熟练使用它,可能需要一点时间去查找相关资料,因为网上关于Plotly的资料不多,大部分都是简单的基础使用教程。如果想找一些详细的操作,比如我找标题居中的方法,经过百度用谷歌在国外论坛找了类似的问题和设置,主观评分:76分BokehBokeh是一个交互可视化的Python库专为网页浏览器的渲染功能而设计。这是Bokeh与其他可视化库的核心区别。可以像D3.js一样做出简单美观的交互可视化效果,但是使用难度比D3.js低。首先导入相关库frombokeh.transformimportdodgeimportpandasasdfrombokeh.core.propertiesimportvalueimportnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlinefrombokeh.ioimportoutput_notebookoutput_notebook()#importnotebook绘图模块frombokeh.plottingimportfigure,showfrombokeh.modelsimportColumnDataSource#import图表绘图,iconge导入valueport数据显示模块#immodule相关的依赖远不止上面三个,而且Bokeh有自己的数据结构ColumnDataSource,所以需要先转换数据,然后创建canvas,添加数据,设置df=pd.DataFrame({'BusinessA':y1,'企业B':y2},index=x_)_x=['企业A','企业B']#系列名称data={'index':x_}foriin_x:data[i]=df[i].tolist()#生成数据,数据格式为dictsource=ColumnDataSource(data=data)#将数据转换成ColumnDataSource对象p=figure(x_range=x_,y_range=(0,150),plot_height=350,title="boken-histogram",tools="十字准线、平移、wheel_zoom、框_zoom,reset,box_select,lasso_select")p.vbar(x=dodge('index',-0.1,range=p.x_range),top='businessA',width=0.2,source=source,color="#718dbf",legend=value("企业A"))p.vbar(x=dodge('index',0.1,range=p.x_range),top='businessB',width=0.2,source=source,color="#e84d60",legend=value("业务B"))#dodge(field_name,value,range=None)→转化为可分组对象,value为元素的位置(有width设置)p.xgrid.grid_line_color=Nonep.legend.location="top_left"p.legend.orientation="horizo??ntal"#其他参数设置show(p),可以看到Bokeh做的图片也支持交互,样式之类的看着挺舒服的,但是上面的图片颜色调整了,因为这两个系列默认是不区分的。Bokeh的一个明显特点就是代码量比上面三个工具大很多,多在数据处理方面,和Plotly一样,与bokeh相关的中文资料不多,大多是入门级的基础,用来入门.虽然从官方的图来看,可以做出比pyecharts精致很多的图,但是需要一定的时间才能找到相关参数的设置,主观评分71分Seaborn从seaborn官网给出的标题就知道seaborn是为统计图表设计的。它是一个基于matplotlib的图形可视化库,即在matplotlib的基础上进行了更高级的API封装,使绘图更加方便。Easy,大部分情况下seaborn可以用来做出非常吸引人的图,而matplotlib可以用来做出特征更多的图,或者我们的数据,使用Seaborn首先需要导入相关的库,因为它是基于Matplotlib的,所以你还是需要设置中文importseabornassnsimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']接下来只需要一行代码就可以生成我们想要的图片,而且默认的配色相比起来并不难看上面这四个工具在代码量上都非常简洁,但是数据要先转换为DataFrame格式,在代码中没有体现,但依然是最短的代码,不支持交互。Seaborn、Plotly和bokeh有一个共同点。虽然功能强大,但是网上关于这三个库的教程和讨论远远少于Pyecharts和Matplotlib。如果您是新手,可能很难通过搜索快速解决遇到的问题,但是需要自己去研究别人的代码,主观评分72分总结以上是5种常见的Python数据可视化的测评。通过绘制条形图来给每个工具打分可能不是很合适,但是我觉得你应该在绘制的时候能够大致熟悉每个库的特点,同时在选择这些工具之前有一个简单的了解。最后,正如我们在本文中介绍的,不同工具的应用场景和目标用户并不完全相同,所以我们在选择工具时需要考虑自己的使用场景,需要评估绘制目标图形的难度,就像有些工具很强大但是素材太少了,不要浪费太多时间去追求高级的款式!如果你还在犹豫要学哪个工具,我的意见是:掌握了一个工具,再去学其他的工具!
