小伙伴们,提到 Python 可视化工具,你直觉还是MatplotLib 或者 Seaborn 吗?
那你就 out 啦,今天我们来看一个更炫酷的可视化工具!
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__)
链式调用
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()
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()
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()
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()
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()
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()
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()
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()
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()
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 --