对于python,平常工作中大家最经常用到的就是它的可视化功能了。python有许多功能强大的可视化库,例如Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh,大家一定不陌生,但是对于这五种可视化库的区别,以及什么情况下使用哪种才能达到最佳效果,大家可能并不是很清楚。下面小编跟大家分享的这篇文章就是对python这五种可视化库的比较,希望对于大家有所帮助。
以下文章来源: 早起Python
作者: 刘早起
相信很多读者学习Python就是希望作出各种酷炫的可视化图表,当然你一定会听说过Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh这五大工具,本文就将通过真实绘图来深度评测这五个Python数据可视化的库,看看到底这几种工具各有什么优缺点,在制作图表时该如何选择。
为了更清晰的了解这几款用于可视化的Python在作图时的异同,本文将使用同一组数据分别制作多系列条形图来对比,主要将通过以下几个指标来进行评测:
本文使用的数据为Pyecharts中的faker数据
from pyecharts.faker import Faker x = Faker.choose() y1 = Faker.values() y2 = Faker.values()
x为一列品牌名称,y1/y2为一列相同长度的无意义数据,接下来让我们使用不同的库对这组数据进行可视化!
01Pyecharts
Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了,支持30+种图表。在pyecharts中制作条形图首先需要导入相关库
from pyecharts import options as opts from pyecharts.charts import Bar
接着是绘图并不做任何任何调整,首先创建一个Bar实例,接着添加x轴y轴数据,注意仅接收list格式数据,最后添加标题并设置在notebook中直接展示。总体来说还是比较符合正常的作图逻辑,整体代码量并不多。
c = ( Bar() .add_xaxis(x) .add_yaxis("商家A", y1) .add_yaxis("商家B", y2) .set_global_opts(title_opts=opts.TitleOpts(title="Pyecharts—柱状图", subtitle="")) ).render_notebook()
默认生成的两系列柱状图如下:
可以看到,该图支持交互式展示与点击,默认生成的样式也较为美观,并且Pyecharts有详细的中文文档与demo,网上关于Pyecharts的讨论也较多,如果是刚接触的读者也能比较快的上手。当然如果对默认样式不满意的话,可以进行一些调整,由于文档十分完整,所以代码修改起来并不困难,比如可以修改主题并设置一些标记线、DataZoom,添加小组件等
总体来说,由于Pyecharts是基于Echarts制作的,因此生成图表比较美观,并且官方中文文档对相关设置讲解非常详细,有关Pyecharts的讨论也非常多,所以如果在使用过程中有相关疑问也很容易通过检索找到答案,但遗憾的是不支持使用pandas中的series数据,需要转换为list才可以使用,不过整体还是让我很满意的一款可视化库。主观评分:85分
02Matplotlib
Matplotlib应该是最广泛使用的Python可视化工具,支持的图形种类非常多,使用Matplotlib制作相同效果的图需要先导入相关库,并且并不支持原生中文所以还要设置下中文显示
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei']
接着就是绘图,但是相比较于pyecharts大多是往写好的代码里面添加数据、配置不同,matplotlib大多数需要我们自己写代码,所以代码量可能稍多一点
width = 0.35 x1 = 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分
03Plotly
Plotly也是一款非常强大的Python可视化库,Plotly内置完整的交互能力及编辑工具,支持在线和离线模式,提供稳定的API以便与现有应用集成,既可以在web浏览器中展示数据图表,也可以存入本地拷贝。但是由于官方未提供中文文档,网上关于Plotly的教程也仅限于官方的一些demo,对于一些详细的参数设置并没有太多资料,首先还是先导入相关库并设置notebook显示
import plotly import plotly.offline as py import plotly.graph_objs as go plotly.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-柱状图", 'y':0.9, 'x':0.5, 'xanchor': 'center', 'yanchor': 'top'}) fig = go.Figure(data=data, layout=layout) py.iplot(fig)
默认样式生成的图如上,配色也不难看,并且可以看到是支持交互式操作的,同时是默认添加toolbox小组件,可以更方便的查看,支持30多种图形,总体来说还是比较优秀的一个可视化工具,但是如果真要熟练使用的话可能需要一点时间用于查找相关资料,因为网上关于Plotly的资料不多,大多是基本使用的简单教程,如果想查找一些细节的操作比如我为了查找让标题居中的方法,百度之后用Google在国外某论坛找到类似问题并找到设置,主观评分:76分
04Bokeh
Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别,它可以做出像D3.js简洁漂亮的交互可视化效果,但是使用难度低于D3.js,首先还是导入相关库
from bokeh.transform import dodge import pandas as pd from bokeh.core.properties import value import numpy as np import matplotlib.pyplot as plt %matplotlib inline from bokeh.io import output_notebook output_notebook() # 导入notebook绘图模块 from bokeh.plotting import figure,show from bokeh.models import ColumnDataSource# 导入图表绘制、图标展示模块 # 导入ColumnDataSource模块 # 导入dodge、value模块
相关依赖比上面三个要多出很多,并且Bokeh有自己的数据结构ColumnDataSource,所以要先对数据进行转换,接着就是创建画布、添加数据及设置
df = pd.DataFrame({'商家A':y1,'商家B':y2}, index = x_) _x = ['商家A','商家B'] # 系列名 data = {'index':x_} for i in _x: data[i] = df[i].tolist()# 生成数据,数据格式为dict source = ColumnDataSource(data=data)# 将数据转化为ColumnDataSource对象 p = figure(x_range=x_, y_range=(0, 150), plot_height=350, title="boken-柱状图",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为元素的位置(配合width设置) p.xgrid.grid_line_color = None p.legend.location = "top_left" p.legend.orientation = "horizontal" # 其他参数设置 show(p)
可以看到,Bokeh做出来的图也是支持交互的,不并且样式之类的看上去还是比较舒服的,不过上面这张图是经过调整颜色的,因为默认不对两个系列进行区分颜色
Bokeh一个很明显的特点就是代码量较上面三个工具要多了很多,大多是在数据的处理上,并且和Plotly一样,有关bokeh相关的中文资料也不多,大多是入门型的基本使用于介绍,虽然从官方给出的图来看能作出很多比pyecharts更精美的图,但是查找相关参数的设置上将会耗费一定时间,主观评分71分。
05Seaborn
从seaborn官网给出的标题就知道,seaborn是为了统计图表设计的,它是一种基于matplotlib的图形可视化库,也就是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图,还是我们的数据,使用Seaborn制作首先需要导入相关库,由于是基于Matplotlib,所以还是需要设置中文
import seaborn as sns import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei']
接下来只要一行代码就能生成我们要的图,默认配色也没有显得很难看
相比上面四种工具,从代码量上来看是非常简洁的,不过还是要先将数据转换为DataFrame格式,这里没在代码中体现,但依旧是最简短的代码,同时并不支持交互。并且Seaborn和Plotly、bokeh有一个共同的地方就是虽然强大,但是网上有关这三个库的教程、讨论都远少于Pyecharts与Matplotlib,如果是新手的话可能很难快速通过搜索解决你遇到的问题,而需要自己研究别人的代码,主观评分72分
以上就是对常见的5个Python数据可视化的评测,可能通过绘制条形图的方式去给每个工具打分不是非常合适,但我想你应该能够大致熟悉到每个库在绘图时的特点,同时也能在选择这些工具之前有一个简单的了解。最后正如我们文中介绍的一样,不同工具的应用场景、目标用户都不完全相同,所以我们在选择工具时需要先思考自己的使用场景,并且需要评估绘制目标图形的难度,就像有些工具虽然强大但是资料太少,不要为了追求高级的样式而浪费太多时间!如果你仍在犹豫学习哪一个工具的话,我的意见是:熟练掌握一个工具之后,了解其他工具即可!最后留一个彩蛋,大家可以猜一猜文中的雷达图是使用文中提到的哪一款工具制作。
数据分析咨询请扫描二维码
在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19阿里P8、P9失业都找不到工作?是我们孤陋寡闻还是世界真的已经“癫”成这样了? 案例一:本硕都是 985,所学的专业也是当红专业 ...
2024-12-19CDA持证人Louis CDA持证人基本情况 我大学是在一个二线城市的一所普通二本院校读的,专业是旅游管理,非计算机非统计学。毕业之 ...
2024-12-18最近,知乎上有个很火的话题:“一个人为何会陷入社会底层”? 有人说,这个世界上只有一个分水岭,就是“羊水”;还有人说,一 ...
2024-12-18在这个数据驱动的时代,数据分析师的技能需求快速增长。掌握适当的编程语言不仅能增强分析能力,还能帮助分析师从海量数据中提取 ...
2024-12-17在当今信息爆炸的时代,数据分析已经成为许多行业中不可或缺的一部分。想要在这个领域脱颖而出,除了热情和毅力外,你还需要掌握 ...
2024-12-17数据分析,是一项通过科学方法处理数据以获取洞察并支持决策的艺术。无论是在商业环境中提升业绩,还是在科研领域推动创新,数据 ...
2024-12-17在数据分析领域,图表是我们表达数据故事的重要工具。它们不仅让数据变得更加直观,也帮助我们更好地理解数据中的趋势和模式。相 ...
2024-12-16在当今社会,我们身处着一个飞速发展、变化迅猛的时代。不同行业在科技进步、市场需求和政策支持的推动下蓬勃发展,呈现出令人瞩 ...
2024-12-16在现代商业世界中,数据分析师扮演着至关重要的角色。他们通过解析海量数据,为企业战略决策提供有力支持。要有效完成这项任务, ...
2024-12-16在当今数据爆炸的时代,数据分析师是组织中不可或缺的导航者。他们通过从大量数据中提取可操作的洞察力,帮助企业在竞争激烈的市 ...
2024-12-16