Python数据可视化-第9章-很全的pycharts教程
一个很全的pyecharts参考https://www.heywhale.com/mw/project/642e7c0a907c87f13bc7419b
环境
开发工具
VSCode
库的版本
numpy==1.26.4
matplotlib==3.10.1
ipympl==0.9.7
pyecharts==2.0.8
教材
本书为《Python数据可视化》一书的配套内容,本章为第9章 使用pycharts绘制图表
本章主要介绍了后来兴起的优秀的数据可视化工具pyecharts,包括pyecharts概述、pyecharts基础知识、绘制常用的图表、绘制组合图表、定制图表主题、整合Web框架,并围绕着这些知识点开发了一个实例——虎扑社区分析。通过学习本章的内容,希望读者可以体会pyecharts的神奇之处,学会使用pyecharts绘制简单的Echarts图表。

参考
https://www.heywhale.com/mw/project/642e7c0a907c87f13bc7419b
https://pyecharts.org/#/zh-cn/intro
https://echarts.apache.org/zh/index.html
第8章-使用matplotlib绘制高级图表
9.1 pyecharts概述
官网链接
https://pyecharts.org/#/zh-cn/intro
安装
pip install pyecharts==2.0.8
然后进入python环境
from pyecharts.charts import Bar
import pyecharts
print(pyecharts.__version__)
Echarts简介
官网链接
https://echarts.apache.org/zh/index.html
9.2 pyecharts基础知识
9.2.1 快速绘制图表
下面以柱形图为例,带领大家感受一下使用pyecharts库绘制图表的基本过程。
from pyecharts.charts import Bar
from pyecharts import options as opts
# 创建 Bar 类的对象 , 并指定画布的大小
bar = Bar(init_opts=opts.InitOpts(width='600px', height='300px' ))
# 添加 x 轴和 y 轴的数据
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# 设置标题、y 轴标签
bar.set_global_opts(title_opts=opts.TitleOpts(title="柱形图示例"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
bar.render_notebook()
链式调用实现
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar(init_opts=opts.InitOpts(width='600px', height='300px'))
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts=opts.TitleOpts(title="柱形图示例"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
bar.render_notebook()
9.2.2 认识图表类
前面介绍的图表类均继承自Base基类,我们可以使用与类同名的构造方法创建相应的图表实例。例如,Bar类的构造方法的语法格式如下:
Bar(init_opts=opts.InitOpts())
以上方法的init_opts参数表示初始化配置项,该参数需要接收一个InitOpts类的对象,通过构建的InitOpts类对象为图表指定一些通用的属性,比如画布大小等。
bar = Bar(init_opts=opts.InitOpts(width='600px', height='300px'))
9.2.3 认识配置项
若pyecharts需要为图表设置全局配置项(InitOpts除外),则需要将全局配置项传入set_global_options()方法。set_global_options()方法的语法格式如下:
set_global_opts(self, title_opts=opts.TitleOpts(),
legend_opts=opts.LegendOpts(),…, axispointer_opts=None)
title_opts:表示标题组件的配置项。
legend_opts:表示图例组件的配置项。
tooltip_opts:表示提示框组件的配置项。
toolbox_opts:表示工具箱组件的配置项。
brush_opts:表示区域选择组件的配置项。
xaxis_opts,yaxis_opts:表示x、y轴的配置项。
visualmap_opts:表示视觉映射组件的配置项。
datazoom_opts:表示数据区域缩放组件的配置项。
graphic_opts:表示原生图形元素组件的配置项。
axispointer_opts:表示坐标轴指示器组件的配置项。
前面介绍的系列配置项类都可以通过与之同名的构造方法创建实例。
创建一个标签配置项:
label_opts = opts.LabelOpts(is_show=True, position='right',
color='gray', font_size=14, rotate=10)
以上示例中,LabelOpts()方法的参数is_show设为True,表示
显示标签;参数position设为’right’,表示标注于图形右方;参数color设为’gray’,表示标签文本的颜色为灰色;参数font_size设为14,说明标签文本的字体大小为14号;参数rotate设为10,说明标签逆时针旋转10度。
若pyecharts需要为图表设置系列配置项,则需要将系列配置项传入add()或add_xx()方法(直角坐标系图表一般使用add_yaxis()方法)中。
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90],
label_opts=opts.LabelOpts(is_show=False))
多学一招:创建配置项
pyecharts可以通过构造方法或字典两种方式创建配置项,两者是等价的。
9.2.4 渲染图表
图表基类Base主要提供了两个渲染图表的方法:render()和render_notebook() 。
render()方法
render()方法用于将图表渲染到HTML文件,默认为位于程序根目录的render.html文件。
render(self, path="render.html", template_name="simple_chart.html",
env=None, **kwargs)
path:表示生成文件的路径,默认为“render.html”。
template_name:表示模板的路径。
render()方法会返回HTML文件的路径字符串。
render_notebook()方法
render_notebook()方法用于将图表渲染到Jupyter Notebook工具中,它无需接收任何参数。
bar.render_notebook()
9.3 绘制常用图表
通过pyecharts绘制各种图表的过程大致相同,可以分为以下几步:
(1)创建与图表对应类的对象。
(2)添加图表数据。
(3)添加图表系列配置项。
(4)添加图表全局配置项。
(5)渲染图表。
9.3.1 绘制折线图
pyecharts的Line类表示折线图,该类中提供了一个add_yaxis()方法,使用add_yaxis()方法可以为折线图添加数据和配置项。
add_yaxis(self, series_name, y_axis, is_selected=True,
is_connect_nones=False, xaxis_index=None, …itemstyle_opts= None)
series_name:表示系列的名称,显示于提示框和图例中。
y_axis:表示系列数据。
color:表示系列对应的注释文本的颜色。
is_symbol_show:表示是否显示标记及注释文本,默认为True。
symbol:表示标记的图形,可以为’circle’(圆形)、‘rect’(矩形)、‘roundRect’(圆角矩形)、‘triangle’(三角形)、‘diamond’(菱形)、‘pin’(大头针)、‘arrow’(箭头)、‘none’(无)。
symbol_size:表示标记的大小,可以接收单一数值,也可以接收诸如 [width, height]的数组。
stack:表示将轴上同一类目的数据堆叠放置。
import pyecharts.options as opts
from pyecharts.charts import Line
line_demo = (
Line()
# 添加x轴、y轴的数据、系列名称
.add_xaxis(['可乐', '雪碧', '啤酒', '橙汁', '奶茶'])
.add_yaxis('商家A', [102, 132, 105, 52, 90], symbol='diamond', symbol_size=15)
.add_yaxis('商家B', [86, 108, 128, 66, 136], symbol='triangle', symbol_size=15)
# 设置标题、y 轴标签
.set_global_opts(title_opts=opts.TitleOpts(title="折线图示例"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)",name_location="center", name_gap=30))
)
line_demo.render_notebook()
9.3.2 绘制饼图或圆环图
pyecharts的Pie类表示饼图,该类中提供了一个add()方法,使用add()方法可以为饼图添加数据和配置项。
add(self, series_name, data_pair, color=None, radius=None, center=None,
rosetype=None, is_clockwise=True,…, itemstyle_opts=None)
series_name:表示系列的名称,显示于提示框和图例中。
data_pair:表示系列数据帧,可以接收形如[(key1, value1), (key2, value2)…]的数据。
radius:表示饼图的半径,可以接收一个包含两个元素的数组或列表,其中第一项为内半径,第二项为外半径。
center:表示饼图的中心坐标。
is_clockwise:表示饼图的扇区是否按顺时针排布。

import pyecharts.options as opts
from pyecharts.charts import Pie
pie_demo = (
Pie()
.add("", [('小米', 150), ('三星', 20), ('华为', 120), ('苹果', 120), ('魅族', 117), ('vivo', 145), ('OPPO', 128)])
.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))
)
pie_demo.render_notebook()

import pyecharts.options as opts
from pyecharts.charts import Pie
pie_demo = (
Pie()
# 添加数据
.add("", [('小米', 150), ('三星', 20), ('华为', 120), ('苹果', 120), ('魅族', 117), ('vivo', 145),
('OPPO', 128)], center=["50%", "50%"], radius=[100, 160])
# 设置标题
.set_global_opts(title_opts=opts.TitleOpts(title="圆环图示例"))
)
pie_demo.render_notebook()
9.3.3 绘制散点图
pyecharts的Scatter类表示散点图,EffectScatter类表示带有涟漪特效的散点图,这两个类中均提供了一个add_yaxis()方法,使用add_yaxis()方法可以为散点图添加数据和配置项。
add_yaxis(self, series_name, y_axis, is_selected=True, xaxis_index=None,
yaxis_index=None, color=None,…, itemstyle_opts=None)
series_name:表示系列的名称,显示于提示框和图例中。
y_axis:表示系列数据。
is_selected:表示是否选中图例。
symbol:表示标记的图形,该参数的取值可以为’circle’(圆形)、‘rect’(矩形)、‘roundRect’(圆角矩形)、‘triangle’(三角形)、‘diamond’(菱形)、‘pin’(大头针)、‘arrow’(箭头)、‘none’(无) 。
symbol_size:表示标记的大小。

import pyecharts.options as opts
from pyecharts.charts import Scatter
scatter_demo = (
Scatter()
.add_xaxis(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
.add_yaxis("", [30, 108, 73, 116, 73, 143, 106])
# 设置标题、x 轴网格、y 轴网格和标签
.set_global_opts(title_opts=opts.TitleOpts(title="散点图示例"),
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True), name="用户活跃量(人)",
name_location="center", name_gap=30)
)
)
scatter_demo.render_notebook()

import pyecharts.options as opts
from pyecharts.charts import EffectScatter
effect_scatter = (
EffectScatter()
.add_xaxis(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
.add_yaxis("", [30, 108, 73, 116, 73, 143, 106], symbol='pin')
# 设置标题、x 轴网格、y 轴网格和标签
.set_global_opts(title_opts=opts.TitleOpts(title="涟漪特效散点图示例"),
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True),
name=" 用户活跃量(人)",name_location="center", name_gap=30)
)
)
effect_scatter.render_notebook()
9.3.4 绘制3D柱形图
pyecharts的Bar3D类表示3D柱形图,该类中提供了一个add()方法,使用add()方法可以为3D柱形图添加数据和配置项。
add(self, series_name, data, shading=None, itemstyle_opts=None,
,…,grid3d_opts=opts.Grid3DOpts())
series_name:表示系列的名称。
data:表示3D柱形图用到的数据。
shading:表示三维图形的着色效果。
xaxis3d_opts:表示x坐标轴的配置项,接收一个Axis3DOpts类的对象。
yaxis3d_opts:表示y坐标轴的配置项,接收一个Axis3DOpts类的对象。
zaxis3d_opts:表示z坐标轴的配置项,接收一个Axis3DOpts类的对象。

import random
from pyecharts import options as opts
from pyecharts.charts import Bar3D
data = [(i, j, random.randint(0, 20)) for i in range(7) for j in range(5)]
bar_3d = (
Bar3D()
.add("", [[d[1], d[0], d[2]] for d in data],
xaxis3d_opts=opts.Axis3DOpts(['A组', 'B组', 'C组','D组', 'E组'], type_="category", name=""),
yaxis3d_opts=opts.Axis3DOpts(['周一', '周二', '周三', '周四', '周五', '周六', '周日'], type_="category", name=""),
zaxis3d_opts=opts.Axis3DOpts(type_="value", name="销售额(万元)")
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=30), title_opts=opts.TitleOpts(title="3D柱形图示例")
)
)
bar_3d.render_notebook()
9.3.5 绘制统计地图
pyecharts的Map类表示统计地图,该类中提供了一个add()方法,使用add()方法可以为统计地图添加数据和配置项。
add(self, series_name, data_pair, maptype="china", is_selected=True,
is_roam=True, center=None, …, emphasis_itemstyle_opts=None)
series_name:表示系列的名称。
data_pair:表示数据项,取值可以为诸如(坐标点名称, 坐标点值)、[坐标点名称, 坐标点值]。
maptype:表示地图的类型,默认值为“china”,其他类型可以参考pyecharts.datasets.map_filenames.json文件 。
is_roam:表示是否开启鼠标缩放和平移漫游,默认值为True。
center:表示当前视角的中心点。
zoom:表示当前视角的缩放比例,默认值为1。
name_map:表示自定义地区的名称映射。
is_map_symbol_show:表示是否显示标记图形。

from pyecharts import options as opts
from pyecharts.charts import Map
data_map = [['朔城区', 100], ['平鲁区', 88], ['山阴县', 99], ['应县', 68], ['右玉县', 35], ['怀仁县', 28]]
# 创建 Map 对象
map_demo = (
Map()
.add("商家A", data_map, "朔州")
.set_global_opts(title_opts=opts.TitleOpts(title="朔州地图示例"), visualmap_opts=opts.VisualMapOpts())
)
map_demo.render_notebook()
9.3.6 绘制漏斗图
pyecharts的Funnel类表示漏斗图,该类中提供了一个add()方法,使用add()方法可以为漏斗图添加数据和配置项。
add(self, series_name, data_pair, is_selected=True, color=None,
sort_="descending", gap=0, , itemstyle_opts=None)
series_name:表示系列的名称。
data_pair:表示系列数据项,数据项的格式为[(key1, value1), (key2, value2) , ……] 。
is_selected:表示是否选中图例。
sort_:表示数据排序,可以取值为’ascending’、‘descending’或’none’。
gap:表示数据图形的间距,默认为0。
tooltip_opts:表示提示框组件配置项,该参数接收TooltipOpts类的对象。

from pyecharts import options as opts
from pyecharts.charts import Funnel
data_fun = [['访问商品', 100], ['加购物车', 50], ['生成订单', 30], ['支付订单', 20], ['完成交易', 15]]
# 创建 Funnel 对象
funnel_demo = (
Funnel()
.add("", data_fun, sort_='descending', tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"))
.set_global_opts(title_opts=opts.TitleOpts(title="漏斗图示例"))
)
funnel_demo.render_notebook()
9.3.7 绘制桑基图
pyecharts的Sankey类表示桑基图,该类中提供了一个add()方法,使用add()方法可以为桑基图添加数据和配置项。
add(self, series_name, nodes, links, is_selected=True, node_width=20,
node_gap=8, …, tooltip_opts=None)
series_name:表示系列的名称。
nodes:表示节点的序列,格式是[{“name”:节点的名称1}, {“name”:节点的名称2}, …]。
links:表示边的序列,格式是[{“source”:来源节点, "target ":目标节点, “value”:流量}, …]。
node_width:表示桑基图中每个矩形节点的宽度。
node_gap:桑基图中每一列任意两个矩形节点之间的间隔。
label_opts:表示标签配置项,它的值是LabelOpts类的对象
linestyle_opt:表示线条样式配置项,它的值是LineStyleOpts类的对象。

from pyecharts import options as opts
from pyecharts.charts import Sankey
nodes = [
{"name":"消费者"},
{"name":"老客户"},
{"name":"新客户"},
{"name":"运动鞋"},
{"name":"衬衫"},
{"name":"连衣裙"},
{"name":"高跟鞋"}
]
links = [
{"source":"消费者", "target":"老客户", "value": 30},
{"source":"消费者", "target":"新客户", "value": 20},
{"source":"老客户", "target":"运动鞋", "value": 10},
{"source":"老客户", "target":"衬衫", "value": 20},
{"source":"新客户", "target":"连衣裙", "value": 10},
{"source":"新客户", "target":"高跟鞋", "value": 10}
]
sankey_demo = (
Sankey()
.add("", nodes=nodes, links=links,linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="桑基图示例"))
)
sankey_demo.render_notebook()
9.4 绘制组合图表
9.4.1 并行多图
pyecharts.charts的Grid类表示并行排列的组合图表,它可以采用左右布局或上下布局的方式显示多个图表。Grid类中包含一个add()方法,使用add()方法可以为组合图表添加图表或配置项。
add(self, chart, grid_opts, grid_index=0, is_control_axis_index=False)
chart:表示图表。
grid_opts:表示直角坐标系网格配置项,它的值是GridOpts类的对象 。
grid_index:表示直角坐标系网格索引,默认为0。
is_control_axis_index:表示是否由自己控制坐标轴索引,默认为False。

from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Grid
x_data = ['小米', '三星', '华为', '苹果', '魅族', 'vivo', 'OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(title_opts=opts.TitleOpts(title="组合图表-柱形图"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)",name_location="center", name_gap=30))
)
line = (
Line()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(
title_opts=opts.TitleOpts(title="组合图表-折线图 ", pos_top="48%"),legend_opts=opts.LegendOpts(pos_top="48%"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30)
)
)
# 创建组合图表, 并以上下布局的方式显示柱形图和折线图
grid = (
Grid()
.add(bar, grid_opts=opts.GridOpts(pos_bottom="60%"))
.add(line, grid_opts=opts.GridOpts(pos_top="60%"))
)
grid.render_notebook()
9.4.2 顺序多图
pyecharts.charts的Page类表示顺序显示的组合图表,它可以在同一网页中按顺序渲染多个图表。Page 类的构造方法的语法格式如下所示:
Page(page_title="Awesome-pyecharts", js_host= "",
interval=1, layout=PageLayoutOpts())
page_title:表示HTML网页的标题,默认值为Awesome-pyecharts。
js_host:表示远程的主机地址,默认值为"https://assets.pyecharts.org/assets/"。
interval:表示每个图例之间的间隔,默认为1。
layout:表示布局配置项,它的值是PageLayoutOpts类的对象。
Grid类提供了一个add()方法,使用add()方法可以为组合图表添加多个图表实例。
add(*charts)
charts: 任意图表实例。

from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Page
x_data = ['小米', '三星', '华为', '苹果', '魅族', 'vivo', 'OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(title_opts=opts.TitleOpts(title="组合图表-柱形图"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)",name_location="center", name_gap=30))
)
line = (
Line()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(title_opts=opts.TitleOpts(title="组合图表-折线图 "),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
# 创建组合图表, 并在同一网页上按顺序显示柱形图和折线图
page = Page()
page.add(bar, line)
page.render_notebook()
9.4.3 选项卡多图
pyecharts.charts的Tab类表示以选项卡形式显示的组合图表,我们可以点击不同的选项卡来切换显示多个图表。Tab类的构造方法的语法格式如下所示:
Tab(page_title="Awesome-pyecharts", js_host="")
以上方法的参数与Page()方法的参数相同,此处不再赘述。
Tab类提供了一个add()方法,使用add()方法可以添加图表及选项卡名称。add()方法的语法格式如下所示:
add(self, chart, tab_name)
以上方法的参数chart表示任意图表,tab_name表示选项卡标签的名称。

from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Tab
x_data = ['小米', '三星', '华为', '苹果', '魅族', 'vivo', 'OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
line = (
Line()
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
# 创建组合图表, 并以单击选项卡的方式显示柱形图或折线图
tab = Tab()
tab.add(bar, "柱形图")
tab.add(line, "折线图")
tab.render_notebook()
9.4.4 时间线轮播多图
pyecharts.charts的Timeline类表示时间线轮播的组合图表,它可以通过单击时间线的时间点来切换显示的图表。Timeline类中提供两个重要的方法add_schema()和add() 。
add_schema()方法
add_schema()方法用于为图表添加指定样式的时间线。
add_schema(self, axis_type="category", orient="horizontal", symbol=None, symbol_size=None, …, itemstyle_opts=None)
axis_type:表示坐标轴的类型,可以取值为’value’(数值轴)、‘category’(类目轴)、‘time’(时间轴)、‘log’(对数轴)。
orient:表示时间线的类型,可以取值为’horizontal’(水平)和’vertical’(垂直)。
play_interval:表示播放的速度,单位为ms。
is_auto_play:表示是否自动播放,默认值为False。
is_loop_play:表示是否循环播放,默认值为True。
is_rewind_play:表示是否反向播放,默认值为False。
is_timeline_show:表示是否显示时间线组件,默认值为True 。
width:表示时间线区域的宽度。
height:表示时间线区域的高度。
add ()方法
add ()方法用于添加图表和时间点。
add(self, chart, time_point)
chart:表示图表。
time_point:表示时间点。

# 导入 pyecharts官方的测试数据
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Page, Pie, Timeline
# 随机获取一组测试数据
x = Faker.choose()
tl = Timeline()
for i in range(2015, 2020):
bar = (
Bar()
.add_xaxis(x)
# Faker.values() 生成一个包含7 个随机整数的列表
.add_yaxis(" 商家 A", Faker.values())
.add_yaxis(" 商家 B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts("时间线轮播柱形图示例"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
tl.add(bar, "{}年".format(i))
tl.render_notebook()
多学一招:pyecharts.faker包
9.5 定制图表主题

前表中列举的属性可以传入InitOpts()方法的theme参数,之后在初始化图表类时将InitOpts类对象传给init_opts参数,如此便修改了图表默认的主题风格。
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA))

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
x_data = ['小米', '三星', '华为', '苹果', '魅族', 'vivo', 'OPPO']
y_a = [107, 36, 102, 91, 51, 113, 45]
y_b = [104, 60, 33, 138, 105, 111, 91]
bar = (
# 创建 Bar 类对象 , 将图表主题替换为ThemeType.ROMA
Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA))
.add_xaxis(x_data)
.add_yaxis("商家A", y_a)
.add_yaxis("商家B", y_b)
.set_global_opts(title_opts=opts.TitleOpts(title="柱形图-ROMA主题"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center", name_gap=30))
)
bar.render_notebook()
9.6 整合Web框架
pyecharts可以轻松地整合Web框架,包括主流的 Django 和 Flask框架等,实现在Web项目中绘制图表的功能。不同的框架和使用场景需要有不同的整合方法。
新建Django项目
打开命令行工具,在命令提示符的后面输入如下命令:
django-admin startproject pyecharts_django_demo
以上命令执行后会在根目录中创建一个名称为pyecharts_django_demo的Django项目。
新建完项目之后,继续在命令行工具中输入如下命令创建一个应用程序:
python manage.py startapp demo
打开pyecharts_django_demo/settings.py文件,在该文件中注册应用程序demo,注册完的代码如下所示:
# pyecharts_django_demo/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo' # 注册的应用程序]
由于创建的demo应用中不包含urls.py文件,需要手动创建urls.py文件。在demo目录下新建urls.py文件,在该文件中添加路由,具体代码如下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
在pyecharts_django_demo/urls.py文件中增加’demo.urls’,代码如下:
pyecharts_django_demo/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'demo/', include('demo.urls'))
]
2. 复制pyecharts模板
在demo目录下新建templates 文件夹,此时demo的目录如下所示:
3. 渲染图表
打开demo/views.py文件,在该文件中增加绘制图表的代码:
def index(request):
c = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.add_yaxis("商家B", [15, 25, 16, 55, 48, 8])
.set_global_opts(title_opts=opts.TitleOpts(title=“柱形图示例", subtitle="我是副标题"),
yaxis_opts=opts.AxisOpts(name="销售额(万元)", name_location="center",name_gap=30))
)
return HttpResponse(c.render_embed())
4. 运行项目
在命令行工具中输入如下运行程序的命令:
python manage.py runserver
在浏览器中打开http://127.0.0.1:8000/demo 即可访问服务,此时的页面如下图所示。
更多推荐

















所有评论(0)