ITPub博客

首页 > > > 干货 | 超详细Pyecharts 1.x 教程,让你的图表动起来~

干货 | 超详细Pyecharts 1.x 教程,让你的图表动起来~

作者:chengycz 时间:2020-03-19 16:23:06 0 删除 编辑

     小伙伴们,提到 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 = [123, 153, 89, 107, 98, 23]
7data2 = [56, 77, 93, 68, 45, 67]
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 = [153, 124, 107, 99, 89, 46]
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 = [123, 153, 89, 107, 98, 23]
7data2 = [56, 77, 93, 68, 45, 67]
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 = [30398, 15230, 10045, 8109, 5698]
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(24) for 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(50, 150)) 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(50, 150)) 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 = [324, 125, 145, 216, 241, 244, 156, 278, 169]
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 = [123, 153, 89, 107, 98, 23]
8data2 = [56, 77, 93, 68, 45, 67]
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(2015, 2020):
9    bar = (
10        Bar()
11        .add_xaxis(cate)
12        .add_yaxis("线上", [random.randint(50, 150) for _ in cate])
13        .add_yaxis("门店", [random.randint(100, 200) for _ in cate])
14        .set_global_opts(title_opts=opts.TitleOpts("手机品牌{}年营业额".format(i)))
15    )
16    tl.add(bar, "{}年".format(i))
17
18tl.render_notebook()



-- end --





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69966956/viewspace-3135399/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-03-19

  • 博文量
    238
  • 访问量
    2595