pyecharts介绍
一. 简介
- pyecharts 是一个用于生成 Echarts 图表的类库。Echarts是百度开源的一个数据可视化 JS 库。 用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。
- 官网:http://pyecharts.org/#/zh-cn/quickstart
- Github:https://github.com/pyecharts/pyecharts/
二. 特性
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
三. 版本
-
v0.5.x 和 V1 间不兼容,V1 是一个全新的版本,详见
https://github.com/pyecharts/pyecharts/issues/892
https://github.com/pyecharts/pyecharts/issues/1033 -
V0.5.x,支持 Python2.7,3.4+
-
V1 仅支持 Python3.6+
-
新版本系列将从 v1.0.0 开始,文档位于 pyecharts.org
四. 安装
- 安装 v1 以上版本
pip/pip3 install pyecharts -U
- 如果需要安装 0.5.11 版本的开发者,可以使用
pip/pip3 install pyecharts==0.5.11
五. 快速开始
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
# 也可以传入路径参数,如 bar.render("mycharts.html")
bar.render()
pyecharts 所有方法均支持链式调用
from pyecharts.charts import Bar
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
bar.render()
使用 options 配置项,在 pyecharts 中,一切皆 Options
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本开始支持链式调用
# 你所看到的格式其实是 `black` 格式化以后的效果
# 可以执行 `pip install black` 下载使用
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
# 或者直接使用字典参数
# .set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
)
bar.render()
# 不习惯链式调用的开发者依旧可以单独调用方法
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
bar.render()
使用pyecharts绘制常见图表
1. 柱状图
Bar-基本示例
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.add_yaxis("商家B", [10, 25, 8, 60, 20, 80])
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
return c.render("0.html")
bar_base()
Bar-渐变圆柱
def bar_border_radius():
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), category_gap="60%")
.set_series_opts(itemstyle_opts={
"normal": {
"color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(0, 244, 255, 1)'
}, {
offset: 1,
color: 'rgba(0, 77, 167, 1)'
}], false)"""),
"barBorderRadius": [30, 30, 30, 30],
"shadowColor": 'rgb(0, 160, 221)',
}})
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-渐变圆柱"))
)
return c.render("1.html")
bar_border_radius()
Bar-显示 ToolBox
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar
def bar_toolbox() -> Bar:
c = (
Bar()
.add_xaxis(["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.add_yaxis("商家B", [10, 25, 8, 60, 20, 80])
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-显示 ToolBox"),
toolbox_opts=opts.ToolboxOpts(),
legend_opts=opts.LegendOpts(is_show=False)
)
)
return c.render("2.html")
bar_toolbox()
Bar-翻转 XY 轴
def bar_reversal_axis() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))
)
return c.rebder("3.html")
Bar-堆叠数据(全部)
def bar_stack0() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values(), stack="stack1")
.add_yaxis("商家B", Faker.values(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-堆叠数据(全部)"))
)
return c.render("4.html")
Bar-MarkPoint(指定类型)
def bar_markpoint_type() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-MarkPoint(指定类型)"))
.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="平均值"),
]
),
)
)
return c.render"5.html")
2. 热力图
import random
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import HeatMap
def heatmap_base() -> HeatMap:
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]
c = (
HeatMap()
.add_xaxis(Faker.clock)
.add_yaxis("series0", Faker.week, value)
.set_global_opts(
title_opts=opts.TitleOpts(title="HeatMap-基本示例"),
visualmap_opts=opts.VisualMapOpts(),
)
)
return c.render("6.html")
heatmap_base()
3. 折线图
import pyecharts.options as opts
from pyecharts.faker import Faker
from pyecharts.charts import Line
def line_base() -> Line:
c = (
Line()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.add_yaxis("商家B", [10, 25, 8, 60, 20, 80])
.set_global_opts(title_opts=opts.TitleOpts(title="Line-基本示例"))
)
return c.render("7.html")
line_base()
4. 面积图
import pyecharts.options as opts
from pyecharts.charts import Line
def line_areastyle() -> Line:
c = (
Line()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis(
"商家A", [5, 20, 36, 10, 75, 90], areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
)
.add_yaxis(
"商家B", [10, 25, 8, 60, 20, 80], areastyle_opts=opts.AreaStyleOpts(opacity=0.5)
)
.set_global_opts(title_opts=opts.TitleOpts(title="Line-面积图"))
)
return c.render("8.html")
line_areastyle()
5. 散点图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Scatter
def scatter_base() -> Scatter:
c = (
Scatter()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts=opts.TitleOpts(title="Scatter-基本示例"))
)
return c.render("9.html")
scatter_base()
6. 层叠多图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Line
def overlap_line_scatter() -> Bar:
x = Faker.choose()
bar = (
Bar()
.add_xaxis(x)
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Overlap-line+scatter"))
)
line = (
Line()
.add_xaxis(x)
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
)
bar.overlap(line)
return bar
overlap_line_scatter().render("10.html")
7. 日历图
import datetime
import random
from pyecharts import options as opts
from pyecharts.charts import Calendar
def calendar_base() -> Calendar:
begin = datetime.date(2019, 1, 1)
end = datetime.date(2019, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
]
c = (
Calendar()
.add("", data, calendar_opts=opts.CalendarOpts(range_="2019"))
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2019年微信步数情况"),
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),
)
)
return c.render("11.html")
calendar_base()
8. 仪表盘
from pyecharts import options as opts
from pyecharts.charts import Gauge, Page
def gauge_base() -> Gauge:
c = (
Gauge()
.add("", [("完成率", 66.6)])
.set_global_opts(title_opts=opts.TitleOpts(title="Gauge-基本示例"))
)
return c.render("12.html")
9.饼图
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Pie
def pie_base() -> Pie:
c = (
Pie()
.add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c.render("13.html")
10. 世界地图
from pyecharts import options as opts
from pyecharts.charts import Map
def map_world() -> Map:
value = [95.1, 23.2, 43.3, 66.4, 88.5]
attr = ["China", "Canada", "Brazil", "Russia", "United States"]
c = (
Map()
.add("商家A", [list(z) for z in zip(attr, value)], "world")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-世界地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
return c.render("13.html")
map_world()
from pyecharts import options as opts
from pyecharts.charts import Map
def map_world() -> Map:
value = [95.1, 23.2, 43.3, 66.4, 88.5]
attr = ["云南", "四川", "山西", "上海", "湖南"]
c = (
Map()
.add("商家A", [list(z) for z in zip(attr, value)], "china")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-中国地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
return c.render("14.html")
map_world()
from pyecharts import options as opts
from pyecharts.charts import Map
def map_world() -> Map:
value = [95.1, 23.2, 43.3, 66.4, 88.5]
attr = ["昆明市", "曲靖市", "丽江市", "普洱市", "大理白族自治州"]
c = (
Map()
.add("商家A", [list(z) for z in zip(attr, value)], "云南")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-云南地图"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
return c.render("15.html")
map_world()