1.PyEcharts简介
1.1 概述
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
Echarts官网网址:网址
1.2 PyEcharts特点
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
1.3 安装
pip install pyecharts==1.9.1
查看pyecharts版本
import pyecharts
print(pyecharts.__version__)
2.快速体验PyEcharts
# 绘制柱状图
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(['A','B','C','D'])
bar.add_yaxis('',[1000,200,1400,2000])
bar.render()
# 支持链式调用
bar = (
Bar()
.add_xaxis(['A','B','C','D'])
.add_yaxis('',[1000,300,1400,2000])
)
bar.render()
使用render返回时,会生成一个html文件,打开文件即可
3.全局配置项
from pyecharts.charts import Bar # 绘制柱状图
from pyecharts.faker import Faker # 导入内置数据
from pyecharts import options as opts
bar = Bar()
bar.add_xaxis(Faker.choose())
bar.add_yaxis("商家 A", Faker.values())
bar.add_yaxis('商家 B', Faker.values())
# 设置全局配置调用方法set_global_opts
bar.set_global_opts(
# 标题设置:title主标题 subtitle副标题 pos_left相对左边的标题位置
title_opts=opts.TitleOpts(title='主标题', subtitle='副标题', pos_left="left"),
# 设置图例:默认时True
legend_opts=opts.LegendOpts(is_show=True),
# 设置工具箱
toolbox_opts = opts.ToolboxOpts(),
# 视觉映射配置项
visualmap_opts=opts.VisualMapOpts(),
# 设置坐标轴: is_show是否显示坐标轴 is_inverse反向显示 _min _max是切片横坐标轴
xaxis_opts=opts.AxisOpts(is_show=True, is_inverse=False, min_=2, max_=4),
yaxis_opts=opts.AxisOpts(is_show=False)
)
bar.render_notebook()
# bar.render()
4.系列配置项
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.faker import Faker
# 设置主题
from pyecharts.globals import ThemeType
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
bar.add_xaxis(Faker.choose())
bar.add_yaxis("", Faker.values())
# 系列配置项:点
bar.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_='max',name='最大值'),
opts.MarkPointItem(type_='min',name='最小值'),
opts.MarkPointItem(type_='average',name='平均值')
])
)
bar.render_notebook()
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.faker import Faker
# 设置主题
from pyecharts.globals import ThemeType
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
bar.add_xaxis(Faker.choose())
bar.add_yaxis("", Faker.values())
# 系列配置项:线
bar.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkPointOpts(data=[
opts.MarkLineItem(type_='max',name='最大值'),
opts.MarkLineItem(type_='min',name='最小值'),
opts.MarkLineItem(type_='average',name='平均值')
]),
# 设置颜色,可以去百度搜索RGB颜色表
itemstyle_opts=opts.ItemStyleOpts(color='#C1FFC1')
)
bar.render_notebook()
5.绘制条形图
5.1 绘制柱状图
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.faker import Faker
# 绘制柱状图
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(Faker.choose())
.add_yaxis("A",Faker.values())
.add_yaxis("B",Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title='柱状图示例'))
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(type_='max',name='最大值')]
)
)
)
bar.render_notebook()
5.2 绘制条形图
# 绘制条形图
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(Faker.choose())
.add_yaxis("A",Faker.values())
.add_yaxis("B",Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title='条形图示例'))
.set_series_opts(
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='合格指标',y=50),
opts.MarkLineItem(name='平均值',type_="average")
]),
label_opts=opts.LabelOpts(is_show=True, position='right')
)
)
bar.reversal_axis()
bar.render_notebook()
5.3 绘制堆叠图
# 绘制堆叠图
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(Faker.choose())
.add_yaxis("A",Faker.values(),stack='stack')
.add_yaxis("B",Faker.values(),stack='stack')
)
bar.set_global_opts(title_opts=opts.TitleOpts(title='堆叠图'))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
bar.render_notebook()
6.绘制直方图
直方图表示被存储到范围中的变量的值的频率以及分布情况。
在视觉上,直方图与柱状图很类似,但是直方图的柱间距为0。
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
# 绘制直方图
bar = Bar()
bar.add_xaxis(Faker.choose())
# 随机颜色的添加,更改柱之间的空隙
bar.add_yaxis("",Faker.values(),category_gap=0, color=Faker.rand_color())
# 添加标题
bar.set_global_opts(title_opts=opts.TitleOpts(title="直方图"))
bar.render_notebook()
7.绘制折线图
from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.faker import Faker
# 绘制折线图
line = Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
x_value = Faker.choose()
y_value = Faker.values()
line.add_xaxis(x_value)
# 让曲线变得圆滑:is_smooth True
# 设置标记点:MarkPointItem value:标记哪个点,coord:标记点的位置
line.add_yaxis("商家 A", y_value,is_smooth=True,
markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(name="自定义标记点",value=y_value[0], coord=[x_value[2],y_value[2]])]
)
)
# 利用全局配置项,设置分隔线splitline_opts
line.set_global_opts(yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
line.render_notebook()
8.堆叠折线图和面积图
from pyecharts.charts import Line
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
from pyecharts import options as opts
# 绘制简单折线图——>绘制多条折线图(多添加几次add_yaxis)——>绘制堆叠图(stack)——>绘制面积图
line = Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
x_data = Faker.week
types = Faker.choose()
line.add_xaxis(x_data)
line.add_yaxis(types[0],Faker.values(),stack='总量')
line.add_yaxis(types[1],Faker.values(),stack='总量')
line.add_yaxis(types[2],Faker.values(),stack='总量')
line.add_yaxis(types[3],Faker.values(),stack='总量')
line.add_yaxis(types[4],Faker.values(),stack='总量')
line.add_yaxis(types[5],Faker.values(),stack='总量')
line.add_yaxis(types[6],Faker.values(),stack='总量')
# 去掉数量标记
line.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
# 设置面积图填充颜色
areastyle_opts=opts.AreaStyleOpts(opacity=0.6)
)
# 利用全局配置项添加标题
line.set_global_opts(title_opts=opts.TitleOpts(title="面积图"),
# 当鼠标放在一个点时,同坐标数值都会进行显示
tooltip_opts=opts.TooltipOpts(trigger='axis'),
# 设置x坐标从头开始, 坐标轴两边留白解决 boundary_gap=False
xaxis_opts=opts.AxisOpts(boundary_gap=False)
)
line.render_notebook()
9.绘制饼图
9.1 常规饼图
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
# 绘制饼图
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
# 饼图存放数据的格式:整体数据是列表,每一个数据点也是以列表形式: [[],[],[],[]]
# 显示每一项的值:{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
pie.add("",
data_pair=[list(z) for z in zip(Faker.choose(), Faker.values())],
label_opts=opts.LabelOpts(formatter="{b}:{d}"),
)
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图"))
pie.render_notebook()
9.2空心饼图
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
# 绘制饼图
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
# 饼图存放数据的格式:整体数据是列表,每一个数据点也是以列表形式: [[],[],[],[]]
# 显示每一项的值:{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
pie.add("",
data_pair=[list(z) for z in zip(Faker.choose(), Faker.values())],
label_opts=opts.LabelOpts(formatter="{b}:{d}"),
# 绘制空心饼图:['圆心的半径','外层的半径']
radius=['50%','70%']
)
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图"))
pie.render_notebook()
9.3 玫瑰形饼图
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
# 绘制饼图
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
# 饼图存放数据的格式:整体数据是列表,每一个数据点也是以列表形式: [[],[],[],[]]
# 显示每一项的值:{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
pie.add("",
data_pair=[list(z) for z in zip(Faker.choose(), Faker.values())],
label_opts=opts.LabelOpts(formatter="{b}:{d}"),
# 玫瑰形饼图
rosetype='radius'
)
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图"))
pie.render_notebook()
10.绘制散点图
from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
from random import randint
# 绘制散点图
scatter = Scatter(init_opts=opts.InitOpts(theme=ThemeType.DARK))
x_value = [randint(0,100) for i in range(100)]
y_value = [randint(0,100) for i in range(100)]
scatter.add_xaxis(xaxis_data=x_value)
# 设置点的大小symbol_size 默认是10
# 设置点的形状symbol 默认是圆
scatter.add_yaxis("",y_axis=y_value, symbol_size=20)
# 散点图查看相关性,不需要显示点的值
scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 此时的x值都是按照x_value的顺序来的,不是从小到大。修改x轴坐标
scatter.set_global_opts(
xaxis_opts=opts.AxisOpts(type_="value"),
# 添加视觉配置项
visualmap_opts=opts.VisualMapOpts()
)
scatter.render_notebook()
11.绘制箱图
from pyecharts.charts import Boxplot
from pyecharts.globals import ThemeType
from pyecharts import options as opts
from random import randint
# 绘制散点图
box = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.DARK))
box.add_xaxis([f'exp{i}' for i in range(1,5)])
# 利用prepare_data处理列表数据后,才能绘制出标准的盒须图, A不做处理,B处理
box.add_yaxis('A',
[[randint(30,100) for i in range(50)],
[randint(40,100) for i in range(50)],
[randint(50,100) for i in range(50)],
[randint(60,100) for i in range(50)]],
)
box.add_yaxis('B', box.prepare_data(
[[randint(90,100) for i in range(50)],
[randint(80,100) for i in range(50)],
[randint(70,100) for i in range(50)],
[randint(60,100) for i in range(50)]]),
)
box.set_global_opts(title_opts=opts.TitleOpts(title='盒须图'))
box.render_notebook()
12.绘制热力图
from pyecharts.charts import HeatMap
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import random
# 绘制热力图
hm = HeatMap(init_opts=(opts.InitOpts(theme=ThemeType.DARK)))
hm.add_xaxis(Faker.clock)
data = [[i,j,random.randint(-20,40)] for i in range(24) for j in range(7)]
hm.add_yaxis('',Faker.week,data)
hm.set_global_opts(visualmap_opts=opts.VisualMapOpts(min_=-20,max_=50),
title_opts=opts.TitleOpts(title='绘制热力图')
)
# 显示数据到方格中,本身就有显示,需要修改位置
hm.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='inside'))
hm.render_notebook()