返回小栈
干货 | 超详细Pyecharts 1.x 教程,让你的图表动起来~
chengycz2020-03-19 16:23:06

     小伙伴们,提到 Python 可视化工具,你第一直觉还是MatplotLib 或者 Seaborn 吗?

     那你就 out 啦,今天我们来看一个更炫酷的可视化工具!


1
前言



       Pyecharts在1.x版本之后迎来重大更新,与老版本(0.5X)已是两个完全不同的版本,所以很多小伙伴在使用Pyecharts出现了类似'pyecharts' has no attribute 'xxx'的报错,那是因为你安装了1.x的版本却使用了0.5x的调用方法。


  • 当然如果你更习惯使用0.5X版本的可以通过如下语句来进行安装: pip install pyecharts==0.5.11


  • 安装1.x版本(仅支持Python 3.6+): pip install pyecharts


    本文将会介绍Pyecharts1.x版本的使用方法,本文所有语句均基于v1.6.2,通过以下语句查询使用pyecharts版本:

import pyecharts

print(pyecharts.__version__)


2
基本使用



链式调用

pyecharts在v1.x之后支持链式调用,具体语句如下:

 1from pyecharts.charts import Bar
2from pyecharts import options as opts
3
4# 示例数据
5cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
6data1 = [123153891079823]
7data2 = [567793684567]
8
9# 1.x版本支持链式调用
10bar = (Bar()
11       .add_xaxis(cate)
12       .add_yaxis('电商渠道', data1)
13       .add_yaxis('门店', data2)
14       .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
15      )
16
17bar.render_notebook()

:其实这运行结果都是动态的,这里只放上截图,可在自己电脑上Jupyter 中运行查看!


全局配置

可以通过全局配置(.set_global_opts():)控制以下区域

系列配置

可以通过系列配置(.set_series_opts())控制图表中的文本,线样式,标记等.

 1"""
2系列配置项使用示例:
31. 不显示数值
42. 标记每个系列的最大值
5"""

6bar = (Bar()
7       .add_xaxis(cate)
8       .add_yaxis('电商渠道', data1)
9       .add_yaxis('门店', data2)
10       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
11                        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
12       .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
13      )
14
15bar.render_notebook()

3
饼图



 1from pyecharts.charts import Pie
2from pyecharts import options as opts
3
4# 示例数据
5cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
6data = [153124107998946]
7pie = (Pie()
8       .add('', [list(z) for z in zip(cate, data)],
9            radius=["30%""75%"],
10            rosetype="radius")
11       .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例", subtitle="我是副标题"))
12       .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%"))
13      )
14
15pie.render_notebook()



4
折线图



 1from pyecharts.charts import Line
2from pyecharts import options as opts
3
4# 示例数据
5cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
6data1 = [123153891079823]
7data2 = [567793684567]
8"""
9折线图示例:
101. is_smooth 折线 OR 平滑
112. markline_opts 标记线 OR 标记点
12"""

13line = (Line()
14       .add_xaxis(cate)
15       .add_yaxis('电商渠道', data1, 
16                  markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
17       .add_yaxis('门店', data2, 
18                  is_smooth=True
19                  markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点"
20                                                                             coord=[cate[2], data2[2]], value=data2[2])]))
21       .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例", subtitle="我是副标题"))
22      )
23
24line.render_notebook()


5
漏斗图



 1from pyecharts.charts import Funnel
2from pyecharts import options as opts
3
4# 示例数据
5cate = ['访问''注册''加入购物车''提交订单''付款成功']
6data = [30398152301004581095698]
7"""
8漏斗图示例:
91. sort_控制排序,默认降序;
102. 标签显示位置
11"""

12funnel = (Funnel()
13          .add("用户数", [list(z) for z in zip(cate, data)], 
14               sort_='ascending',
15               label_opts=opts.LabelOpts(position="inside"))
16          .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例", subtitle="我是副标题"))
17         )
18
19funnel.render_notebook()



6
热力图



 1from pyecharts.charts import HeatMap
2from pyecharts import options as opts
3from pyecharts.faker import Faker
4import random
5
6# 示例数据
7data = [[i, j, random.randint(50)] for i in range(24for j in range(7)]
8heat = (HeatMap()
9        .add_xaxis(Faker.clock)
10        .add_yaxis("访客数"
11                   Faker.week, 
12                   data,
13                   label_opts=opts.LabelOpts(is_show=True, position="inside"))
14        .set_global_opts(
15            title_opts=opts.TitleOpts(title="HeatMap-基本示例", subtitle="我是副标题"),
16            visualmap_opts=opts.VisualMapOpts(),
17            legend_opts=opts.LegendOpts(is_show=False))
18       )
19
20heat.render_notebook()



7
地理图



 1from pyecharts import options as opts
2from pyecharts.charts import Map
3import random
4
5province = ['广东''湖北''湖南''四川''重庆''黑龙江''浙江''山西''河北''安徽''河南''山东''西藏']
6data = [(i, random.randint(50150)) for i in province]
7_map = (
8        Map()
9        .add("销售额", data, "china")
10        .set_global_opts(
11            title_opts=opts.TitleOpts(title="Map-基本示例"),
12            legend_opts=opts.LegendOpts(is_show=False),
13            visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
14        )
15    )
16
17_map.render_notebook()


8
地理热点图



 1from pyecharts import options as opts
2from pyecharts.charts import Geo
3from pyecharts.globals import ChartType
4import random
5
6province = ['武汉''十堰''鄂州''宜昌''荆州''孝感''黄石''咸宁''仙桃']
7data = [(i, random.randint(50150)) for i in province]
8geo = (Geo().
9        add_schema(maptype="湖北")
10        .add("门店数", data,type_=ChartType.HEATMAP)
11        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
12        .set_global_opts(
13            visualmap_opts=opts.VisualMapOpts(),
14            legend_opts=opts.LegendOpts(is_show=False),
15            title_opts=opts.TitleOpts(title="Geo-湖北热力地图"))
16      )
17
18geo.render_notebook()

9
组合图标



 1from pyecharts import options as opts
2from pyecharts.charts import Map, Bar, Grid
3from pyecharts.globals import ChartType, ThemeType
4import random
5
6province = ['武汉''十堰''鄂州''宜昌''荆州''孝感''黄石''咸宁''仙桃']
7data = [324125145216241244156278169]
8bar = (Bar()
9       .add_xaxis(province)
10       .add_yaxis('营业额', data)
11       .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
12       .set_global_opts(
13            title_opts=opts.TitleOpts(title="Grid-Bar")
14        )
15      )
16
17line = (Line()
18       .add_xaxis(province)
19       .add_yaxis('营业额', data, 
20                  markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
21       .set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"))
22      )
23
24grid = (
25        Grid()
26        .add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
27        .add(line, grid_opts=opts.GridOpts(pos_top="60%"))
28    )
29
30grid.render_notebook()



10
主题设置



 1from pyecharts import options as opts
2from pyecharts.charts import Bar
3from pyecharts.globals import ThemeType
4
5# 示例数据
6cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
7data1 = [123153891079823]
8data2 = [567793684567]
9"""
10主题设置:
11默认white
12"""

13bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC))
14       .add_xaxis(cate)
15       .add_yaxis('电商渠道', data1)
16       .add_yaxis('门店', data2)
17       .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
18                        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),]))
19       .set_global_opts(title_opts=opts.TitleOpts(title="Theme-ROMANTIC"))
20      )
21
22bar.render_notebook()



11
时间轴



 1from pyecharts import options as opts
2from pyecharts.charts import Bar, Timeline
3from pyecharts.globals import ThemeType
4
5# 示例数据
6cate = ['Apple''Huawei''Xiaomi''Oppo''Vivo''Meizu']
7tl = Timeline()
8for i in range(20152020):
9    bar = (
10        Bar()
11        .add_xaxis(cate)
12        .add_yaxis("线上", [random.randint(50150for _ in cate])
13        .add_yaxis("门店", [random.randint(100200for _ in cate])
14        .set_global_opts(title_opts=opts.TitleOpts("手机品牌{}年营业额".format(i)))
15    )
16    tl.add(bar, "{}年".format(i))
17
18tl.render_notebook()



-- end --





0
0