一、前言
pyecharts 是一个用于生成 Echarts 图表的Python库。Echarts是百度开源的一个数据可视化 JS 库,可以生成一些非常酷炫的图表。
本文将会介绍Pyecharts1.x版本的使用方法,本文所有语句均基于v1.8.1
,通过以下语句查询使用pyecharts版本:
import pyecharts print(pyecharts.__version__)
二、基本使用
1、柱状图
from pyecharts.charts import Bar from pyecharts import options as opts # 示例数据 cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu'] data1 = [123, 153, 89, 107, 98, 23] data2 = [56, 77, 93, 68, 45, 67] # 单独调用 bar = Bar() bar.add_xaxis(cate) bar.add_yaxis('电商渠道', data1) bar.add_yaxis('门店', data2) bar.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()
2、全局配置
可以通过全局配置(.set_global_opts():)控制以下区域
全局配置项使用示例:
1. 标题 & 副标题
2. 不显示图例
bar = Bar() bar.add_xaxis(cate) bar.add_yaxis('电商渠道',data1) bar.add_yaxis('门店',data2) bar.set_global_opts(title_opts=opts.TitleOpts(title='Bar-基本示例',subtitle='副标题'), toolbox_opts=opts.ToolboxOpts(), legend_opts=opts.LegendOpts(is_show=False)) bar.render("不显示图例.html")
3、系列配置
可以通过系列配置(.set_series_opts()
)控制图表中的文本,线样式,标记等.
系列配置项使用示例:
1. 不显示数值
2. 标记每个系列的最大值
from pyecharts.charts import * from pyecharts.components import Table from pyecharts import options as opts from pyecharts.commons.utils import JsCode import random import pyecharts import datetime # 使用 snapshot-selenium 渲染图片 from pyecharts.render import make_snapshot from snapshot_selenium import snapshot bar=(Bar() .add_xaxis(cate) .add_yaxis('电商渠道',data1) .add_yaxis('门店',data2) .set_series_opts(label_opts=opts.LabelOpts(is_show=False), markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='max',name="最大值"),])) .set_global_opts(title_opts={"text":"Bar-基本示例","subtext":"副标题"})) #bar.render("标记最大值.html") # 使用 snapshot-selenium 渲染图片 make_snapshot(snapshot,bar.render(),'bar2.png')
三、基本图表
1、饼图
from pyecharts.charts import * from pyecharts import options as opts import pyecharts # 使用 snapshot-selenium 渲染图片 from pyecharts.render import make_snapshot from snapshot_selenium import snapshot pie = Pie() pie.add('',[list(z) for z in zip(cate,data1)], radius=["30%","75%"], rosetype="radius") pie.set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例",subtitle="我是副标题")) pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")) make_snapshot(snapshot,pie.render(),'pie.png')
pie.add('',[list(z) for z in zip(cate,data1)],
# 饼图的半径,数组的第一项是内半径,第二项是外半径
# 默认设置成百分比,相对于容器高宽中较小的一项的一半
radius=["30%","75%"],
# 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。 # radius:扇区圆心角展现数据的百分比,半径展现数据的大小 # area:所有扇区圆心角相同,仅通过半径展现数据大小
rosetype="radius")
2、折线图
from pyecharts.charts import Line from pyecharts import options as opts # 使用 snapshot-selenium 渲染图片 from pyecharts.render import make_snapshot from snapshot_selenium import snapshot # 示例数据 cate = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu'] data1 = [123, 153, 89, 107, 98, 23] data2 = [56, 77, 93, 68, 45, 67] #折线图 """ 折线图示例: 1. is_smooth 折线 OR 平滑 2. markline_opts 标记线 OR 标记点 """ line = (Line() .add_xaxis(cate) .add_yaxis("电商渠道",data1, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")])) .add_yaxis("门店",data2,is_smooth=True, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点", coord=[cate[2], data2[2]], value=data2[2])])) .set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例",subtitle="我是副标题")) ) make_snapshot(snapshot,line.render(),'line.png')
# MarkPointOpts:标记点配置项
markpoint_opts=opts.MarkPointOpts(
# 标记点数据
data=[
# MarkPointItem:标记点数据项
opts.MarkPointItem(
# 标注名称
name="自定义标记点",
# 特殊的标注类型,用于标注最大值最小值等。可选:
# 'min' 最大值、'max' 最大值 、'average' 平均值。
# 自己试了一下,如果同时设置type_和coord,只会显示coord的标记点
# type_ = 'min',
type_ = None,
# 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值,可以是
# 0(xAxis, radiusAxis),
# 1(yAxis, angleAxis),默认使用第一个数值轴所在的维度。
value_index = None,
# 在使用 type 时有效,用于指定在哪个维度上指定最大值最小值。这可以是维度的直接名称Optional[str],
# 例如折线图时可以是 x、angle 等、candlestick 图时可以是 open、close 等维度名称。
value_dim = None,
# 标注的坐标。坐标格式视系列的坐标系而定,可以是直角坐标系上的 x, y,
# 也可以是极坐标系上的 radius, angle。例如 [121, 2323]、['aa', 998]。
coord=[x[2], y[2]], #这里是直角坐标系x轴第三个,y轴第三个
# 标注值,可以不设。
value=y[2],
# 相对容器的屏幕 x 坐标,单位像素 Optional[Numeric]
x = None,
# 相对容器的屏幕 y 坐标,单位像素 Optional[Numeric]
y = None,
# 标记的图形
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
# 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
symbol = None, #一般默认就好
# 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
# 例如 [20, 10] 表示标记宽为 20,高为 10。
symbol_size = None, #一般默认就好
# 标记点样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts = None,
)],
# 也可以在这里设置 标记的图形。
# ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
# 'diamond', 'pin', 'arrow', 'none'
# 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
symbol = None, #一般默认就好
# 以及设置标记的大小,
symbol_size = None, #一般默认就好
# 标签配置项,参考 `series_options.LabelOpts`
label_opts = opts.LabelOpts(position="inside", color="#fff"),)
3、漏斗图
from pyecharts.charts import Funnel from pyecharts import options as opts from pyecharts.render import make_snapshot from snapshot_selenium import snapshot #漏斗图 #示例数据 cate = ['访问','注册','加入购物车','提交订单','付款成功'] data = [30398,15230,10045,8109,5698] """ 漏斗图示例: 1. sort_控制排序,默认降序; 2. 标签显示位置 """ funnel = (Funnel() .add('用户数',[list(z) for z in zip(cate,data)], sort_='ascending',label_opts=opts.LabelOpts(position='inside')) .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例", subtitle="我是副标题"))) make_snapshot(snapshot,funnel.render(),'funnel.png')#funnel.render_notebook()
add('用户数',[list(z) for z in zip(cate,data)],
sort_='ascending',
#标签显示位置
label_opts=opts.LabelOpts(position='inside'))
4、热力图
from pyecharts.charts import HeatMap from pyecharts import options as opts from pyecharts.faker import Faker import random # 示例数据 data = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] heat = (HeatMap() .add_xaxis(Faker.clock) .add_yaxis("访客数", Faker.week, data, label_opts=opts.LabelOpts(is_show=True, position="inside")) .set_global_opts( title_opts=opts.TitleOpts(title="HeatMap-基本示例", subtitle="我是副标题"), visualmap_opts=opts.VisualMapOpts(), legend_opts=opts.LegendOpts(is_show=False)) ) heat.render_notebook()