随着大数据时代的到来,传统的统计图表已经很难满足对复杂数据进行直观地展示,数据可视化作为一个新的研究领域越来越受码农们的欢迎。成功的可视化不仅拥有高颜值,而且具有深内涵——可以让观察者们一眼就能洞察事实并产生新的理解。
Echarts是一个由百度开源的数据可视化工具,代码开源免费,可以在官网上生成图片并下载,它凭借着良好的交互性和精巧的图表设计,得到了众多开发者的认可。而Python是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化,pyecharts就诞生了。
pyecharts是Python语言中的扩展库,它覆盖了Echarts的全部图表和大部分功能,有着良好的特性:简洁的API(操作系统留给应用程序的一个调用接口)设计,使用如丝滑般流畅,支持链式调用;囊括了30+种常见图表,应有尽有;支持主流 Notebook 环境,Jupyter Notebook和 JupyterLab;高度灵活的配置项,可轻松搭配出精美的图表;详细的文档和示例,帮助开发者更快的上手项目等等。
好话不多说,谁用谁知道!使用之前,我们可以通过两个方式安装pyecharts。第一个方法是运行cmd,输入以下命令:
pip install pyecharts
第二个方法是源码安装:
$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install # 或者执行 python install.py
上文已经提到,pyecharts已经囊括了30多种图表,例如,3D图、地图、词云图、热力图等等,通过参数配置和程序设计,我们可以设计出各式各样得高颜值图表。不积跬步,无以致千里,我们先从简单的柱状图开始,揭开pyecharts的神秘面纱吧!
我们以2019上半年明星微博热搜次数的数据为例,生成简单的柱状图。首先,导入柱状图(Bar)模块:
from pyecharts.charts import Bar
第二步,利用add方法添加图表数据和设置各种配置项:
bar=Bar() #创建Bar实例
bar.add_xaxis(["周杰伦", "易烊千玺", "朱一龙", "倪大红","张艺兴","迪丽热巴","吴亦凡", "杨幂"])
bar.add_yaxis("热搜次数", [65,50,55,49,48,45,42,49])
其中,bar.add_xaxis()中的参数为横坐标上的数据;bar.add_yaxis()中的第一个参数为图例,第二个参数列表为纵坐标上的数据。上文提到了pyecharts 所有方法均支持链式调用,在此也可写为:
bar = (
Bar()
.add_xaxis(["周杰伦", "易烊千玺", "朱一龙", "倪大红","张艺兴","迪丽热巴","吴亦凡", "杨幂"]) #加入横坐标参数
.add_yaxis("热搜次数", [65,50,55,49,48,45,42,49]) #加入纵坐标数据
)
第三步,使用默认的配置和模板,直接渲染出柱形图:
bar.render(r'E:\pyecharts学习\FirstBar.html')
render会生成本地 HTML文件,默认会在当前目录生成render.html文件。它也支持 path 参数,如程序所示可以设置文件保存位置,文件需要用浏览器打开。
通过以上命令,就可生成一个最基础的关于“2019上半年明星热搜次数”的柱形图,如下图所示:
以上我们只是展示了一个图表最基本的信息,而在实际应用中,我们需要向图表中不断地添加信息来展示出图表中数据的分布、特点以及做此图的目的等等。
如果我们想在柱状图中添加标题时,需要通过 set_global_options 方法来设置全局配置项。全局配置项包括了初始化配置项、工具箱配置项、标题配置项、图例配置项等,我们可以根据需求通过对这些配置项的设定设计出清晰全面的图表。
那么对于标题的设定,需要利用到标题配置项TitleOpts:
from pyecharts import options as opts #导入options
bar.set_global_opts(title_opts=opts.TitleOpts(title = "2019上半年明星微博热搜次数",subtitle = "柱状图展示"))
其中title表示主标题,subtitle表示副标题。
如果我们想在柱状图中展示出最大值、最小值以及平均值时,就需要通过set_series_opts方法来设置系列配置项。系列配置项包括了文字样式配置项、标记点数据项和配置项、标记线数据项和配置项、分割线配置项等。
那么想要标记出最大和最小值,需要利用标记点配置项MarkPointOpts:
bar.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='max',name='最大值'),opts.MarkPointItem(type_='min',name='最小值')]))
我们需要通过标题配置项中展示出最大和最小值,又要通过标记点数据项MarkPointItem方法设定。其中,type_是固定写法,只适用于特殊的标注类型如最大和最小值,如果是一般的坐标轴上的点,则用coord=[‘横坐标’,’’’纵坐标’];name表示了这个标记点的名字。这里需要注意data是一个系列,就算只有一个标记点也必须做list处理。
同样的,如果要在柱状图中画出平均值线,利用标记线配置项MarkLineOpts和标记点数据项:
bar.set_series_opts(markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average',name='平均值')]))
当一个横坐标值对应两个或多个纵坐标数据时,只需要再添加一次或多次bar.add_yaxis()信息。我们再加入2018下半年这些明星上微博热搜的次数,则改变后的纵坐标的数据如下所示:
bar.add_yaxis("2018下半年", [24,63,81,0,42,28,66,31]) #加入纵坐标参数
bar.add_yaxis("2019上半年", [65,50,55,49,48,45,42,49])
相对于一般纵向放置的柱状图,小编觉得横向的Bar更直观更好看,那么改变方向只需要向程序中加入:
bar.reversal_axis()
数据的变化导致标题也需要变化,最终的柱状图如下所示:
根据图表,我们可以看出明星上微博热搜的次数与他们参演的电视剧和综艺节目或者参加的活动有很大的关系。例如,倪大红在2019年参演的电视剧《都挺好》爆红之后,由于演技爆表以及角色的设定受到观众一直喜欢,故热搜次数和2018有很大差距。
这些数据和信息通过柱状图都清晰的展示了出来,里面有没有你pick的小哥哥呢~