文章来源:EarlyPython作者:刘早起相信很多读者学习Python都是因为想制作各种炫酷的可视化图表。当然,你一定听说过Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh,这五款工具,本文将通过实拍来深入评测这五款Python数据可视化库,看看这五款工具的优缺点是什么,以及制作图表时如何选择。指标说明为了更清楚地了解绘图时这些用于可视化的Python的异同,本文将使用同一组数据制作多个系列的柱状图进行对比。将使用以下指标进行评估:data说明本文使用的数据是Pyecharts中的faker数据`frompyecharts.fakerimportFakerx=Faker.choose()y1=Faker.values()y2=Faker.values()`x是一列品牌名称,y1/y2是一列相同长度的无意义数据,让我们用不同的库来可视化这组数据!01PyechartsEcharts是百度开源的数据可视化。凭借良好的交互性和精美的图表设计,得到了众多开发者的认可。另一方面,Python是一种非常适合数据处理的表达性语言。当数据分析遇上数据可视化,pyecharts诞生,支持30+图表。在pyecharts中制作条形图,首先需要导入相关库`frompyechartsimportoptionsasoptsfrompyecharts.chartsimportBar`,然后不做任何调整直接绘制。首先创建一个Bar实例,然后添加x轴和y轴数据。注意只接收列表格式的数据,最后添加一个标题并设置为直接在笔记本中显示。总体来说比较符合正常的绘图逻辑,整体代码量也不多。`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分02MatplotlibMatplotlib应该是使用最广泛的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分。03PlotlyPlotly也是一个非常强大的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='BusinessA',)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分04BokehBokeh是一个专为网页浏览器渲染功能设计的交互可视化Python库。这是Bokeh与其他可视化库的核心区别。可以像D3.js一样做出简单美观的交互可视化效果,但是使用难度比D3.js低。首先导入相关库`frombokeh.transformimportdodgeimportpandasasppdfrombokeh.core.propertiesimportvalueimportnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlinefrombokeh.ioimportoutput_notebookoutput_notebook()#导入笔记本绘图模块frombokeh.plottingimportfigure,showfrombokeh.lumnimportSportCopiedicondrawingDisplaymodule#ImportColumnDataSourcemodule#Importdodgeandvaluemodules`相关依赖远不止上面三个,而且Bokeh有自己的数据结构ColumnDataSource,所以要先转换数据,然后创建画布,添加数据和设置`df=pd.DataFrame({'BusinessA':y1,'BusinessB':y2},index=x_)_x=['BusinessA','BusinessB']#系列名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="crosshair,pan,wheel_zoom,box_zoom,reset,box_select,lasso_select")p.vbar(x=dodge('index',-0.1,range=p.x_range),top='商户A',width=0.2,source=source,color="#718dbf",legend=value("企业A"))p.vbar(x=dodge('index',0.1,range=p.x_range),top='企业B',width=0.2,source=source,color="#e84d60",legend=value("商人B"))#dodge(field_name,value,range=None)→转化为可分组对象,value为元素的位置(配合宽度设置)p.xgrid.grid_line_color=Nonep.legend.location="top_left"p.legend.orientation="horizo??ntal"#其他参数设置show(p)`可以看到Bokeh做出来的图片也支持交互,没有,还有款式之类的看着挺舒服的,不过上图在颜色上做了调整,因为两个系列默认是不区分的。Bokeh的一个明显特点就是代码量比上面三个工具都要多。很多,主要是数据处理方面的,和Plotly一样,bokeh相关的中文资料不多,大部分都是入门级的基础,用来入门,虽然从官方的图来看,比pyecharts能做出很多画面很美,但是需要一定的时间才能找到相关参数的设置。主观评分71分05Seaborn从seaborn官网给的标题就知道seaborn是为统计图表设计的。Easy,大部分情况下seaborn可以用来做出很吸引人的图,而matplotlib可以用来做出特征更多的图,或者我们的数据,使用Seaborn首先需要导入相关的库,因为它是基于Matplotlib的,所以我们还是需要设置中文`importseabornassnsimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']`接下来只需要一行代码就可以生成我们想要的图,默认颜色搭配起来并不难看。和上面四个工具相比,在代码量上已经很简洁了,但是还是需要将数据转换成DataFrame格式,代码中没有体现,但依然是最短的代码,并没有不支持交互。Seaborn、Plotly和bokeh有一个共同点。虽然它们很强大,但是网上关于这三个库的教程和讨论远远少于Pyecharts和Matplotlib。如果您是新手,可能很难通过搜索快速解决遇到的问题,但是需要自己去研究别人的代码,主观评分72分总结以上是5种常见的Python数据可视化的测评。通过绘制条形图来给每个工具打分可能不是很合适,但是我觉得你应该在绘制的时候能够大致熟悉每个库的特点,同时在选择这些工具之前有一个简单的了解。最后,正如我们在本文中介绍的,不同工具的应用场景和目标用户并不完全相同,所以我们在选择工具时需要考虑自己的使用场景,需要评估绘制目标图形的难度,就像有些工具很强大但是素材太少了,不要浪费太多时间去追求高级的款式!如果你还在犹豫要学哪个工具,我的意见是:掌握了一个工具,再去学其他的工具!最后,还有一个彩蛋。大家可以猜猜文章中提到的雷达图是用哪个工具制作的。
