irpas技术客

【宝藏级】PyEcharts 超详细的使用指南_风口IT猪的成长录_pyecharts

未知 551

Python可视化神器-pyecharts手册 pyecharts简介优点:安装:官方文档: pyecharts快速开始在`Notebook`中创建一个条形图:链式调用:配置选项: 全局配置项`AnimationOpts`:画图动画配置项`InitOpts`:初始化配置项`ToolBoxFeatureOpts`和`ToolboxOpts`:工具箱配置项`TitleOpts`:标题配置项`DataZoomOpts`:区域缩放配置项`LegendOpts`:图例配置项`VisualMapOpts`:视觉映射配置项`TooltipOpts`:提示框配置项`AxisLineOpts/AxisTickOpts/AxisPointerOpts/AxisOpts`: 坐标轴轴线/刻度/指示器/坐标轴配置项。示例代码如下:`SingleAxisOpts`:单轴配置项 条形图横向条形图堆叠条形图:设置条形图的间距:带有网格的条形图: 饼图箱线图基本使用: 折线图散点图基本使用:多维散点图: 雷达图地理图中国地图:中国局部地图:世界地图:

pyecharts简介

Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了。Echarts是用JS来写的,而我们使用pyecharts则可以使用Python来调用里面的API。

优点: 简洁的 API 设计,使用如丝滑般流畅,支持链式调用囊括了 30+ 种常见图表,应有尽有支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab可轻松集成至 Flask,Django 等主流 Web 框架高度灵活的配置项,可轻松搭配出精美的图表详细的文档和示例,帮助开发者更快的上手项目多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持 安装: 在普通的python环境中:pip install pyecharts。在anaconda中: 先打开anaconda prompt。输入pip install pyecharts进行安装。

首先打开命令行(win+r),输入:

pip install pyecharts

由于墙的原因,下载时会出现断线和速度过慢的问题导致下载失败,所以建议通过清华镜像来进行下载:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts

出现上方的信息,即代表下载成功,我们可以来进行下一步的实验了!

使用实例

注意:就是python2.x和python3.x的编码问题,在python3.x中你可以把它看做默认是unicode编码,但在python2.x中并不是默认的,原因就在它的bytes对象定义的混乱,而pycharts是使用unicode编码来处理字符串和文件的,所以当你使用的是python2.x时,请务必在上方插入此代码:

from future import unicode_literals

可以忽略因为目前大都是python3

官方文档: 官方文档(中文):https://pyecharts.org/#/zh-cn/intro。官方github:https://github.com/pyecharts/pyecharts。 pyecharts快速开始

pyecharts中可以绘制的图有很多,这里我们先来总体的了解一下他的使用风格,和调用的方式。有宏观的理解后,再具体学习具体图形的绘制。

在Notebook中创建一个条形图: from pyecharts.charts import Bar bar = Bar() bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.render_notebook() 链式调用:

有些程序员喜欢链式调用,或者链式调用在某些情况下可以让代码更加简洁。pyecharts中所有的方法都支持链式调用。比如以上条形图的代码可以改成:

from pyecharts.charts import Bar bar = ( Bar() .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) .add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) ) bar.render_notebook() 配置选项:

pyecharts中包括图的标题,颜色主题等,都是通过选项Options配置的。

比如:

from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType bar = ( # 使用了InitOpts来初始化图的主题 Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) .add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) .add_yaxis("商家B", [10, 21, 30, 15, 80, 92]) # 使用TitleOpts来初始化了标题和子标题 .set_global_opts(title_opts=opts.TitleOpts(title="Pyecharts练习",subtitle="柱状图")) ) bar.render_notebook()

所有的这些都是有相应的opts来配置。

全局配置项

我们来看下全局配置项有哪些。在学习具体的配置项之前,先来看下pyecharts生成的图由哪几个部分组成。

针对以上每个部分,都有相应的配置项来进行配置。所有的配置类,都是放到pyecharts.options中。

AnimationOpts:画图动画配置项

可以配置画图的动画,比如是否开启动画,动画持续时间,动画缓动效果等。

具体参数参考:https://pyecharts.org/#/zh-cn/global_options?id=animationopts%ef%bc%9aecharts-%e7%94%bb%e5%9b%be%e5%8a%a8%e7%94%bb%e9%85%8d%e7%bd%ae%e9%a1%b9

InitOpts:初始化配置项

可以配置诸如图像宽度,高度,图表主题,背景颜色等。示例代码如下:

from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType from faker import Faker c = ( Bar( init_opts=opts.InitOpts( width="500px", height="400px", theme=ThemeType.LIGHT, bg_color="skyblue" ) ) .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) ) c.render_notebook()

具体参考:https://pyecharts.org/#/zh-cn/global_options?id=initopts%ef%bc%9a%e5%88%9d%e5%a7%8b%e5%8c%96%e9%85%8d%e7%bd%ae%e9%a1%b9。

ToolBoxFeatureOpts和ToolboxOpts:工具箱配置项

可以配置图片右上角的工具箱。 具体参考:https://pyecharts.org/#/zh-cn/global_options?id=toolboxfeatureopts%ef%bc%9a%e5%b7%a5%e5%85%b7%e7%ae%b1%e5%b7%a5%e5%85%b7%e9%85%8d%e7%bd%ae%e9%a1%b9。

TitleOpts:标题配置项

配置图的标题和子标题等信息。示例代码如下:

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts( title="销售表", pos_right="0", pos_bottom="2px", title_textstyle_opts=opts.TextStyleOpts(**{"color":"#333","font_size":12}) )) ) c.render_notebook()

具体参考:https://pyecharts.org/#/zh-cn/global_options?id=titleopts%ef%bc%9a%e6%a0%87%e9%a2%98%e9%85%8d%e7%bd%ae%e9%a1%b9。

DataZoomOpts:区域缩放配置项

图的底部的缩放配置项目。比如是否展示缩放,缩放过程中是否需要实时更新图等。

具体参考:https://pyecharts.org/#/zh-cn/global_options?id=datazoomopts%ef%bc%9a%e5%8c%ba%e5%9f%9f%e7%bc%a9%e6%94%be%e9%85%8d%e7%bd%ae%e9%a1%b9。

LegendOpts:图例配置项

配置图例。示例代码如下:

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .set_global_opts( legend_opts=opts.LegendOpts(selected_mode="mutiple",orient="vertical",pos_right="30px") ) ) c.render_notebook()

更多请参考:https://pyecharts.org/#/zh-cn/global_options?id=legendopts%ef%bc%9a%e5%9b%be%e4%be%8b%e9%85%8d%e7%bd%ae%e9%a1%b9。

VisualMapOpts:视觉映射配置项

示例代码如下:

c = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis("商品",[(x,y) for x,y in zip(Faker.values(),Faker.values())]) .set_global_opts( visualmap_opts = opts.VisualMapOpts(type_="size",range_text=['大','小']) ) ) c.render_notebook()

更多请参考:https://pyecharts.org/#/zh-cn/global_options?id=visualmapopts%ef%bc%9a%e8%a7%86%e8%a7%89%e6%98%a0%e5%b0%84%e9%85%8d%e7%bd%ae%e9%a1%b9。

TooltipOpts:提示框配置项

提示框的配置项。示例代码如下:

c = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis("商家A",Faker.values()) .set_global_opts( title_opts=opts.TitleOpts(title="Scatter-多维度数据"), tooltip_opts=opts.TooltipOpts( formatter=JsCode( "function (params) {return params.value}" ) ) ) ) c.render_notebook()

更多请参考:https://pyecharts.org/#/zh-cn/global_options?id=tooltipopts%ef%bc%9a%e6%8f%90%e7%a4%ba%e6%a1%86%e9%85%8d%e7%bd%ae%e9%a1%b9。

AxisLineOpts/AxisTickOpts/AxisPointerOpts/AxisOpts: 坐标轴轴线/刻度/指示器/坐标轴配置项。示例代码如下: c = ( Bar() .add_xaxis( [ "名字很长的X轴标签1", "名字很长的X轴标签2", "名字很长的X轴标签3", "名字很长的X轴标签4", "名字很长的X轴标签5", "名字很长的X轴标签6", ] ) .add_yaxis("商家A", [10, 20, 30, 40, 50, 40]) .add_yaxis("商家B", [20, 10, 40, 30, 40, 50]) .set_global_opts( xaxis_opts=opts.AxisOpts( name="商家名称", axislabel_opts=opts.LabelOpts(rotate=-15), axisline_opts = opts.AxisLineOpts(symbol="arrow",linestyle_opts=opts.LineStyleOpts(width=2)), axistick_opts = opts.AxisTickOpts(is_inside=True,length=20), axispointer_opts = opts.AxisPointerOpts(is_show=True,type_="line") ) ) ) c.render_notebook()

更多请参考:https://pyecharts.org/#/zh-cn/global_options?id=axislineopts-%e5%9d%90%e6%a0%87%e8%bd%b4%e8%bd%b4%e7%ba%bf%e9%85%8d%e7%bd%ae%e9%a1%b9。

SingleAxisOpts:单轴配置项

更多请参考:https://pyecharts.org/#/zh-cn/global_options?id=singleaxisopts%ef%bc%9a%e5%8d%95%e8%bd%b4%e9%85%8d%e7%bd%ae%e9%a1%b9。

条形图 横向条形图

横向条形图只要调用reversal_axis()即可。

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .add_yaxis("商家B", Faker.values()) .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts(position="right")) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴")) )

效果图如下:

堆叠条形图:

堆叠条形图只要在添加y轴的函数add_yaxis上添加stack参数即可。示例代码如下:

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values(), stack="stack1") .add_yaxis("商家B", Faker.values(), stack="stack1") .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(全部)")) )

效果图如下:

设置条形图的间距:

条形图得间距设置有两种。第一种是设置category_gap参数,这个参数是x轴每个分类的间距,第二个是gap,这个是统一分类下多根柱子间的间距。示例代码如下:

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values(), category_gap="80%") .set_global_opts(title_opts=opts.TitleOpts(title="Bar-单系列柱间距离")) )

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values(), gap="0%") .add_yaxis("商家B", Faker.values(), gap="0%") .set_global_opts( title_opts=opts.TitleOpts(title="Bar-不同系列柱间距离"), ) )

带有网格的条形图:

网格图,是在x轴和y轴上,都绘制横线,形成的网格。可以在opts.AxisOpts中通过设置splitline_opts实现。

c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .set_global_opts( title_opts=opts.TitleOpts(title="Scatter-显示分割线"), xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)), yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)), ) ) c.render_notebook()

柱状图-Bar

//导入柱状图-Bar from pyecharts import Bar //设置行名 columns = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] //设置数据 data1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] data2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] //设置柱状图的主标题与副标题 bar = Bar("柱状图", "一年的降水量与蒸发量") //添加柱状图的数据及配置项 bar.add("降水量", columns, data1, mark_line=["average"], mark_point=["max", "min"]) bar.add("蒸发量", columns, data2, mark_line=["average"], mark_point=["max", "min"]) //生成本地文件(默认为.html文件) bar.render()

简单的几行代码就可以将数据进行非常好看的可视化,而且还是动态的,在这里还是要安利一下jupyter,pyecharts在v0.1.9.2版本开始,在jupyter上直接调用实例(例如上方直接调用bar)就可以将图表直接表示出来,非常方便。

饼图 //导入饼图Pie from pyecharts import Pie //设置主标题与副标题,标题设置居中,设置宽度为900 pie = Pie("饼状图", "一年的降水量与蒸发量",title_pos='center',width=900) //加入数据,设置坐标位置为【25,50】,上方的colums选项取消显示 pie.add("降水量", columns, data1 ,center=[25,50],is_legend_show=False) //加入数据,设置坐标位置为【75,50】,上方的colums选项取消显示,显示label标签 pie.add("蒸发量", columns, data2 ,center=[75,50],is_legend_show=False,is_label_show=True) //保存图表 pie.render()

箱线图

箱线图使用pyecharts.charts.Boxplot来实现。

基本使用: v1 = [ [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880] + [1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960], [960, 940, 960, 940, 880, 800, 850, 880, 900] + [840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800], ] v2 = [ [890, 810, 810, 820, 800, 770, 760, 740, 750, 760] + [910, 920, 890, 860, 880, 720, 840, 850, 850, 780], [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870] + [870, 810, 740, 810, 940, 950, 800, 810, 870], ] c = Boxplot() c.add_xaxis(["expr1", "expr2"]).add_yaxis("A", c.prepare_data(v1)).add_yaxis( "B", c.prepare_data(v2) ).set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例")) c.render_notebook()

箱体图-Boxplot

//导入箱型图Boxplot from pyecharts import Boxplot boxplot = Boxplot("箱形图", "一年的降水量与蒸发量") x_axis = ['降水量','蒸发量'] y_axis = [data1,data2] //prepare_data方法可以将数据转为嵌套的 [min, Q1, median (or Q2), Q3, max] yaxis = boxplot.prepare_data(y_axis) boxplot.add("天气统计", x_axis, _yaxis) boxplot.render()

折线图 from pyecharts import Line line = Line("折线图","一年的降水量与蒸发量") //is_label_show是设置上方数据是否显示 line.add("降水量", columns, data1, is_label_show=True) line.add("蒸发量", columns, data2, is_label_show=True) line.render()

散点图

散点图用的是pyecharts.charts.Scatter来实现的。

基本使用: c = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts(title="Scatter-基本示例")) ) c.render_notebook()

多维散点图: c = ( Scatter() .add_xaxis(Faker.choose()) .add_yaxis( "商家A", [list(z) for z in zip(Faker.values(), Faker.choose())], label_opts=opts.LabelOpts( formatter=JsCode( "function(params){return params.value[1] +' : '+ params.value[2];}" ) ), ) .set_global_opts( title_opts=opts.TitleOpts(title="Scatter-多维度数据"), tooltip_opts=opts.TooltipOpts( formatter=JsCode( "function (params) {return params.name + ' : ' + params.value[2];}" ) ), visualmap_opts=opts.VisualMapOpts( type_="color", max_=150, min_=20, dimension=1 ), ) ) c.render_notebook()

雷达图 from pyecharts import Radar radar = Radar("雷达图", "一年的降水量与蒸发量") //由于雷达图传入的数据得为多维数据,所以这里需要做一下处理 radar_data1 = [[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]] radar_data2 = [[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]] //设置column的最大值,为了雷达图更为直观,这里的月份最大值设置有所不同 schema = [ ("Jan", 5), ("Feb",10), ("Mar", 10), ("Apr", 50), ("May", 50), ("Jun", 200), ("Jul", 200), ("Aug", 200), ("Sep", 50), ("Oct", 50), ("Nov", 10), ("Dec", 5) ] //传入坐标 radar.config(schema) radar.add("降水量",radar_data1) //一般默认为同一种颜色,这里为了便于区分,需要设置item的颜色 radar.add("蒸发量",radar_data2,item_color="#1C86EE") radar.render()

地理图 中国地图: c = ( Map() .add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china") .set_global_opts( title_opts=opts.TitleOpts(title="Map-VisualMap(连续型)"), visualmap_opts=opts.VisualMapOpts(max_=200), ) ) c.render_notebook()

中国局部地图: c = ( Map() .add("商家A", [list(z) for z in zip(Faker.guangdong_city, Faker.values())], "广东") .set_global_opts( title_opts=opts.TitleOpts(title="Map-广东地图"), visualmap_opts=opts.VisualMapOpts(), ) ) c.render_notebook()

世界地图: c = ( Map() .add("商家A", [list(z) for z in zip(Faker.country, Faker.values())], "world") .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) .set_global_opts( title_opts=opts.TitleOpts(title="Map-世界地图"), visualmap_opts=opts.VisualMapOpts(max_=200), ) ) c.render_notebook()


加油!

感谢!

努力!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #pyecharts