Pyecharts 背景介绍
在当今大数据时代,数据可视化已经成为信息表达的重要方式。无论是商业分析、科研探索,还是 Web 应用展示,直观的图表总能让数据讲述更生动的故事。而在 Python 生态中,Pyecharts 是一个强大且易用的数据可视化库,它基于 ECharts,提供了丰富的可视化组件,支持折线图、柱状图、饼图、地图等多种图表类型,且能够方便地集成到 Web 端和 Jupyter Notebook 中。
对于想要用 Python 实现高质量可视化的开发者来说,Pyecharts 是一个不错的选择。它不仅封装了强大的 ECharts 功能,还让复杂的交互图表变得更加简单。本文将介绍 Pyecharts 的核心功能,并通过示例展示如何使用它进行数据可视化,让你的数据更具表现力!
从官网的介绍来看,pyecharts 有以下诸多特性:
- 简洁的 API 设计,使用如丝滑般流畅,支持链式调用
- 囊括了 30+ 种常见图表,应有尽有
- 支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
- 可轻松集成至 Flask,Django 等主流 Web 框架
- 高度灵活的配置项,可轻松搭配出精美的图表
- 详细的文档和示例,帮助开发者更快的上手项目
- 多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持
并且可以通过 pip 安装和源码安装两种方式来安装 pyecharts:
# 安装 v2 以上版本
$ pip install pyecharts -U
# 安装 v2 以上版本
$ git clone https://github.com/pyecharts/pyecharts.git
从 GitHub 的 pyecharts 官网来看,安装好 pyecharts 之后,就可以进行代码的运行,并可以在浏览器中看到数据可视化的效果。
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本开始支持链式调用
bar = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
)
bar.render()
通过生成的 render.html 文件,点开之后就可以看到柱状图的可视化效果。
同样的,在 Jupyter Notes 中也可以直接呈现出这些效果。另外,在 pyecharts 的图表类型里面,绝对不仅仅局限于柱状图,折线图、饼图、散点图都可以做出来。详情可以参见表格:
| 图表类型 | 适用场景 |
| 柱状图(Bar) | 适用于分类数据的对比,如销售数据、人口分布 |
| 折线图(Line) | 适用于趋势分析,如股票价格、温度变化 |
| 饼图(Pie) | 适用于数据占比展示,如市场份额、人口构成 |
| 散点图(Scatter) | 适用于数据分布分析,如身高体重关系、房价分布 |
| 地图(Map) | 适用于地理数据可视化,如人口分布、疫情数据 |
| 热力图(Heatmap) | 适用于二维数据分析,如温度分布、访问热度 |
| 词云(WordCloud) | 适用于文本数据分析,如关键词分析 |
| 箱线图(Box Plot) | 数据分布分析、离群值检测、统计描述。展示数据的最大值、最小值、中位数、四分位数及异常值,帮助识别数据的离散性和分布情况。 |
| 仪表盘(Gauge) | 实时监控、KPI展示、进度追踪。适用于实时数据展示,显示目标进度或某项指标的当前状态。 |
| 漏斗图(Funnel) | 销售漏斗、转化率分析、用户行为分析。用于展示数据流的逐步转化过程,适合分析各阶段转化情况。 |
| 树图(Tree) | 组织结构、层级关系、分类展示。适用于展示层级结构,如公司组织架构、文件目录等。 |
| 平行坐标系图(Parallel Coordinates) | 多维数据分析、机器学习特征分析。用于展示多维数据的关系,适合高维数据的可视化,如特征对比分析。 |
| 桑基图(Sankey Diagram) | 数据流、能源流、资金流、转化流。展示不同阶段之间的数据流动和流量,适合展示数据的流向。 |
| 地理坐标系图(Geo) | 地理数据展示、区域分布、人口分布。适合展示地理位置相关的数据,如城市人口、区域销售数据等。 |
| 时间线图(Timeline) | 动态数据展示、时间序列分析、趋势展示。适用于随着时间变化的数据可视化,展示历史数据的变化趋势。 |
| 3D 散点图(3D Scatter) | 三维数据展示、空间数据分析。用于展示三维空间中的数据点,适合显示三维数据分布。 |
| 3D 柱状图(3D Bar) | 三维数据展示、空间分析。通过三维柱状图展示多维数据的对比,适合空间或高维数据展示。 |
| 3D 曲面图(3D Surface) | 三维曲面展示、空间数据分析。适用于展示三维空间中的连续数据关系,如科学计算中的曲面拟合。 |
基础图表介绍
柱状图(Bar Chart)使用介绍
柱状图(Bar Chart)是最常见的图表类型之一,适用于展示不同类别之间的数量对比。它通过竖直或水平的条形来表示每个类别的数值大小,帮助我们快速识别出数据中的差异和趋势。
代码示例
from pyecharts.charts import Bar
from pyecharts import options as opts
# 创建柱状图对象
bar = Bar()
# 链式调用进行配置
bar.add_xaxis(["A", "B", "C", "D", "E"]) # 设置x轴类别
bar.add_yaxis("销量", [120, 200, 150, 80, 70]) # 设置y轴数据
# 设置全局配置
bar.set_global_opts(
title_opts=opts.TitleOpts(title="销售数据", subtitle="2023年上半年"),
xaxis_opts=opts.AxisOpts(name="商品"),
yaxis_opts=opts.AxisOpts(name="销量")
)
# 渲染生成图表
bar.render()
代码解析
Bar():创建一个柱状图对象。add_xaxis(["A", "B", "C", "D", "E"]):设置 x 轴的类别,通常是你想要展示的各个分类(如商品、地区等)。add_yaxis("销量", [120, 200, 150, 80, 70]):设置 y 轴的数据,即每个分类的数值。set_global_opts():用来设置图表的全局配置项,包括标题、x 轴和 y 轴的名称等。这里使用了链式调用来逐一设置标题、x 轴和 y 轴的配置。render():将图表渲染成 HTML 文件,方便在浏览器中查看。
运行上述代码后,会在当前目录下生成一个 render.html 文件,打开该文件可以看到柱状图的展示效果。该柱状图展示了商品 A、B、C、D、E 的销量数据,且带有标题和坐标轴名称。
除了基础配置,Pyecharts 还支持进一步定制柱状图的外观,例如设置柱子的颜色、添加图例、调整样式等。下面是一个进阶的示例,展示了如何进行更多的自定义。
from pyecharts.charts import Bar
from pyecharts import options as opts
# 创建柱状图对象
bar = Bar()
# 链式调用进行配置
bar.add_xaxis(["A", "B", "C", "D", "E"]) # 设置x轴类别
bar.add_yaxis("销量", [120, 200, 150, 80, 70], color="skyblue") # 设置y轴数据并调整颜色
bar.add_yaxis("利润", [50, 100, 70, 60, 90], color="orange") # 添加另一组y轴数据
# 设置全局配置
bar.set_global_opts(
title_opts=opts.TitleOpts(title="销售数据", subtitle="2023年"),
xaxis_opts=opts.AxisOpts(name="商品"),
yaxis_opts=opts.AxisOpts(name="销量/利润"),
legend_opts=opts.LegendOpts(pos_top="10%") # 图例位置
)
# 渲染生成图表
bar.render("render_advanced.html")
代码解析
add_yaxis("销量", [120, 200, 150, 80, 70], color="skyblue"):为柱状图添加另一组数据,并设置柱子的颜色为“skyblue”。add_yaxis("利润", [50, 100, 70, 60, 90], color="orange"):再次为柱状图添加一组数据,用于展示利润,颜色设置为“orange”。legend_opts=opts.LegendOpts(pos_top="10%"):设置图例的位置,使其出现在图表的顶部。
用上述代码生成的图表如下所示:
折线图(Line Chart)使用介绍
折线图(Line Chart)是用于展示数据随时间变化趋势的常见图表类型。它通过将数据点连接成线段的方式,帮助用户识别数据变化的规律和趋势。折线图适用于时间序列数据、趋势分析、对比分析等场景。
在 Pyecharts 中,可以使用链式调用方式来非常方便地生成折线图,并进行多种定制化配置。
代码示例
from pyecharts.charts import Line
from pyecharts import options as opts
# 创建折线图对象
line = Line()
# 链式调用进行配置
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"]) # 设置x轴标签(月份)
line.add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300]) # 设置y轴数据(销量)
# 设置全局配置
line.set_global_opts(
title_opts=opts.TitleOpts(title="2023年上半年销量趋势"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销量"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line") # 设置悬浮提示框
)
# 渲染生成图表
line.render()
代码解析
Line():创建一个折线图对象。add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"]):设置 x 轴标签,这里是月份。add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300]):设置 y 轴数据,这里是每个月的销量数据。set_global_opts():设置全局配置,包括图表的标题、坐标轴名称等。title_opts=opts.TitleOpts(title="2023年上半年销量趋势"):设置图表的标题。xaxis_opts=opts.AxisOpts(name="月份")和yaxis_opts=opts.AxisOpts(name="销量"):设置 x 轴和 y 轴的名称。tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"):设置提示框,鼠标悬浮时会显示相应的数据。
render():生成 HTML 文件并渲染折线图,可以通过浏览器打开查看。
Pyecharts 还支持在同一个折线图中展示多条折线,适用于对比多个系列的数据。此外,还可以定制折线的颜色、线条样式、图例等。下面是一个进阶示例,展示了如何在折线图中绘制多条折线,并进行更多样式的自定义。
from pyecharts.charts import Line
from pyecharts import options as opts
# 创建折线图对象
line = Line()
# 添加x轴
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"])
# 添加销量数据线
line.add_yaxis("销量", [150, 200, 180, 220, 240, 280, 300], color="skyblue", is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2))
# 添加利润数据线
line.add_yaxis("利润", [50, 100, 70, 60, 90, 150, 200], color="orange", is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2, type_="dashed"))
# 设置全局配置
line.set_global_opts(
title_opts=opts.TitleOpts(title="2023年上半年销售与利润趋势"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="金额"),
legend_opts=opts.LegendOpts(pos_top="5%"), # 设置图例位置
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line") # 提示框
)
# 渲染生成图表
line.render("render_advanced.html")
代码解析
is_smooth=True:使折线图的线条变得平滑,避免折线过于尖锐。linestyle_opts=opts.LineStyleOpts(width=2):设置折线的宽度为 2。color="skyblue"和color="orange":分别为销量线和利润线设置不同的颜色。type_="dashed":设置利润线为虚线样式。legend_opts=opts.LegendOpts(pos_top="5%"):设置图例的位置为顶部。
使用上述配置,将得到一个包含两条折线的图表,分别表示“销量”和“利润”,并且每条折线有不同的颜色、样式和图例。生成的图表将帮助你更加清晰地对比不同指标之间的关系。
饼图(Pie Chart)使用介绍
饼图(Pie Chart)是一种常见的统计图表,用于展示数据各部分占总量的比例。它通过一个圆形图形,将整体数据分成若干扇形区域,每个区域的角度代表该部分占总体的比例。饼图通常用于展示各个部分对总量的贡献,特别适用于数据分布较为离散或比例关系显著的场景。饼图具有直观、简洁的特点,非常适合用来展示市场份额、销售比例、人口分布等场景。
饼图的适用场景
- 市场份额分析:展示各个品牌或公司在市场中的份额。
- 财务数据展示:比如收入、支出的分布情况。
- 人口或地区分布:例如某个地区不同年龄段的比例。
- 产品分类统计:展示不同产品销售比例。
代码示例
from pyecharts.charts import Pie
from pyecharts import options as opts
# 创建饼图对象
pie = Pie()
# 链式调用进行配置
pie.add(
"销售额", # 数据系列名称
[("苹果", 30), ("香蕉", 20), ("橙子", 50)], # 数据内容:水果及其对应的销售额
radius=["30%", "75%"], # 饼图的半径范围
)
# 设置全局配置
pie.set_global_opts(
title_opts=opts.TitleOpts(title="2023年水果销售占比"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"), # 设置图例位置
)
# 渲染生成图表
pie.render()
代码解析
Pie():创建一个饼图对象。add():用于添加数据。第一个参数是系列名称,这里是“销售额”。第二个参数是数据,包含了水果名称和对应的销售额。radius用于设置饼图的半径,["30%", "75%"]表示饼图的内半径和外半径,控制图形的大小和内外环之间的空隙。set_global_opts():设置全局配置项,包括图表的标题、图例的位置等。title_opts=opts.TitleOpts(title="2023年水果销售占比"):设置饼图的标题。legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"):设置图例的位置,图例采用垂直排列,位置靠左并放置在图表的顶部。
render():生成render.html文件,使用浏览器打开即可查看图表效果。
Pyecharts 还支持更多的自定义选项,比如突出显示某个扇区、设置标签显示、调整动画效果等。以下是一个进阶的示例,展示了如何突出显示某个数据点,并显示详细标签。
代码示例
from pyecharts.charts import Pie
from pyecharts import options as opts
# 创建饼图对象
pie = Pie()
# 链式调用进行配置
pie.add(
"销售额", # 数据系列名称
[("苹果", 30), ("香蕉", 20), ("橙子", 50)],
radius=["30%", "75%"], # 饼图的半径范围
label_opts=opts.LabelOpts(
is_show=True, # 显示标签
position="outside", # 标签位置在扇形外部
formatter="{b}: {c} ({d}%)", # 标签内容,显示类别、数值和百分比
),
)
# 设置全局配置
pie.set_global_opts(
title_opts=opts.TitleOpts(title="2023年水果销售占比"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
)
# 渲染生成图表
pie.render("render_advanced.html")
代码解析
label_opts=opts.LabelOpts(is_show=True, position="outside", formatter="{b}: {c} ({d}%)"):控制标签的显示和格式,position="outside"将标签放置在扇形的外侧,formatter="{b}: {c} ({d}%)"设置标签内容显示为“类别: 数值(百分比)”。
饼图的每个扇区都标有相应的标签,显示该类别的数值和占总量的百分比,同时标签线也经过了样式调整。生成的图表将更加清晰,用户能够轻松识别每个部分的具体信息。
散点图(Scatter Plot)使用介绍
散点图(Scatter Plot)通常用于展示两个变量之间的关系,比如在医学研究中,身高和体重之间的关系就是一个经典的分析场景。我们将用一个简单的例子来展示如何使用 Pyecharts 绘制散点图,并分析数据点之间的趋势。
在这个示例中,我们将生成一组虚拟的身高和体重数据,并通过散点图展示身高与体重之间的关系。假设身高和体重之间有某种程度的线性相关性,散点图将帮助我们直观地观察这一点。
数据示例
假设我们有以下数据:
- 身高(cm):一个人的身高一般在 150cm 到 200cm 之间。
- 体重(kg):根据身高,体重会有所不同,一般来说,身高越高,体重大致也会越大。
我们将生成一些模拟数据,展示身高与体重之间的关系。
代码示例
from pyecharts.charts import Scatter
from pyecharts import options as opts
import random
# 创建散点图对象
scatter = Scatter()
# 生成身高(cm)和体重(kg)数据
height = [random.randint(150, 200) for _ in range(50)] # 随机生成50个身高数据
weight = [round(h * 0.5 + random.randint(10, 20), 1) for h in height] # 假设体重与身高成正比,并添加随机偏差
# 将身高和体重数据配对
data = list(zip(height, weight))
# 添加身高和体重数据
scatter.add_xaxis([d[0] for d in data]) # 将身高数据作为 X 轴
scatter.add_yaxis("体重", [d[1] for d in data], symbol_size=8, color="#ff7f50") # 将体重数据作为 Y 轴,并设置颜色
# 设置全局配置
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="身高与体重的关系", subtitle="散点图展示身高与体重之间的相关性"),
xaxis_opts=opts.AxisOpts(
name="身高 (cm)", type_="value", name_location="middle", name_gap=30
),
yaxis_opts=opts.AxisOpts(
name="体重 (kg)", type_="value", name_location="middle", name_gap=30
),
tooltip_opts=opts.TooltipOpts(
trigger="item", # 触发方式为“item”
formatter="身高: {b} cm<br/>体重: {c} kg", # 格式化提示框内容,显示身高和体重
),
visualmap_opts=opts.VisualMapOpts(
min_=50,
max_=150,
dimension=1, # 按体重的值进行颜色映射
range_color=["#d94e5d", "#eac736", "#50a3ba"], # 配置颜色范围
),
)
# 渲染生成图表
scatter.render()
代码解析
- 使用
Scatter()创建一个散点图对象,后续的配置和数据添加都将在此对象上进行。 height:我们用random.randint(150, 200)随机生成 50 个介于 150cm 到 200cm 之间的身高数据。weight:体重是根据身高生成的。假设体重大致与身高成正比,h * 0.5是体重与身高的比例,随机加上一个范围在 10 到 20 之间的偏差,使得数据看起来更自然。add_xaxis():将height数据作为 X 轴的值传入。add_yaxis():将weight数据作为 Y 轴的值传入,并设置点的大小为 8,颜色为#ff7f50(一种橙色)。title_opts:设置图表的标题为“身高与体重的关系”。xaxis_opts和yaxis_opts:分别设置 X 轴和 Y 轴的名称,并调整名称的位置。tooltip_opts:配置鼠标悬浮时的提示框,显示身高和体重的具体数值。visualmap_opts:根据体重值设置颜色映射,从红色到蓝色,体重越大,颜色越接近蓝色。- 使用
render()方法将图表渲染到一个 HTML 文件中,这样我们可以在浏览器中查看该图表。
展示效果
生成的散点图会展示 50 个身高与体重数据点,其中:
- X 轴表示身高(单位:cm)。
- Y 轴表示体重(单位:kg)。
- 数据点的颜色从红色到蓝色,代表不同的体重值,颜色越蓝表示体重大,颜色越红表示体重较小。
- 鼠标悬停在某个数据点时,提示框会显示该点的身高和体重。
通过 Pyecharts,我们可以快速绘制出身高与体重之间的关系散点图。该图表不仅直观地展示了数据点之间的相关性,还通过颜色映射、交互提示等增强了可读性和易用性。使用 Pyecharts 的散点图,不仅可以用于类似的线性数据分析,还可以扩展到多维度数据的可视化分析中。
图表排版
多个图表竖排
当我们掌握了各种图表的基本使用方法后,接下来一个非常重要的任务就是将这些图表有效地集成到网页中,展示数据的可视化效果。Pyecharts 提供了非常方便的功能,让我们能够将图表生成 HTML 文件,并嵌入到网页中进行展示。通过将图表集成到网页,用户不仅能够与数据进行互动,还能够获得更加直观、动态的展示效果。
在接下来的内容中,我们将详细介绍如何将多个图表(如柱状图、折线图、散点图等)融合到一个网页中,并通过 HTML 和 JavaScript 来增强页面的交互性和用户体验。通过这种方式,你可以将不同类型的图表展示在同一页面上,利用 Pyecharts 提供的丰富配置选项,轻松实现数据可视化的多样性和灵活性。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random
# 创建柱状图
bar = Bar()
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图示例"),
xaxis_opts=opts.AxisOpts(name="类别"),
yaxis_opts=opts.AxisOpts(name="值"),
)
# 创建折线图
line = Line()
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
title_opts=opts.TitleOpts(title="折线图示例"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额"),
)
# 创建饼图
pie = Pie()
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))
# 创建散点图
scatter = Scatter()
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="散点图示例"),
xaxis_opts=opts.AxisOpts(name="X轴"),
yaxis_opts=opts.AxisOpts(name="Y轴"),
)
# 使用 Page 将多个图表放在一个页面中
page = Page()
page.add(bar, line, pie, scatter)
# 渲染页面到 HTML 文件
page.render("combined_chart.html")
print("所有图表已合并到 combined_chart.html 文件中。")
通过执行这段代码,最终会生成一个名为 combined_chart.html 的文件。打开该文件后,你将看到一个网页,包含四个图表(柱状图、折线图、饼图、散点图),它们将呈现在同一个页面中,用户可以浏览并查看不同图表的数据。通过 Pyecharts 提供的 Page 类,我们可以方便地将多个图表集成到一个 HTML 页面中进行展示,提升数据展示的效果和用户体验。
拖拽图表
在很多场景下,我们需要根据各个图表的具体情况来进行拖拽式的展示,在这里,pyecharts 同样提供了一个拖拽式的功能。Save Config 按钮就是用来保存拖拽后的样式的。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random
# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(width="50%", height="400px"))
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图示例"),
xaxis_opts=opts.AxisOpts(name="类别"),
yaxis_opts=opts.AxisOpts(name="值"),
)
# 创建折线图
line = Line(init_opts=opts.InitOpts(width="50%", height="400px"))
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
title_opts=opts.TitleOpts(title="折线图示例"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额"),
)
# 创建饼图
pie = Pie(init_opts=opts.InitOpts(width="50%", height="400px"))
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))
# 创建散点图
scatter = Scatter(init_opts=opts.InitOpts(width="50%", height="400px"))
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="散点图示例"),
xaxis_opts=opts.AxisOpts(name="X轴"),
yaxis_opts=opts.AxisOpts(name="Y轴"),
)
# 使用 Page 将多个图表放在一个页面中,调整为左右布局
page = Page(layout=Page.DraggablePageLayout, page_title="综合数据展示")
page.add(bar, line, pie, scatter)
# 渲染页面到 HTML 文件
page.render("combined_chart.html")
print("所有图表已合并到 combined_chart.html 文件中。")
这样会形成一个可以拖拽式的网页,拖拽完成之后点击左上角的 Save Config 按钮,可以得到一个 chart_config.json 文件。然后写一个新的脚本,运行下面的代码,即可将原有的 html 文件(’combined_chart.html’)和 chart_config.json 文件一起生成新的 html 文件(’combined_chart_resize.html’)并且符合拖拽后的样式。
from pyecharts.charts import Page
# 在生成的config上,重新生成chart
page = Page()
page.save_resize_html('combined_chart.html', cfg_file='chart_config.json', dest='combined_chart_resize.html')
通过 Page 的 DraggablePageLayout 布局,图表会以拖拽的方式自动排列。你可以通过手动调整页面上的每个图表位置。width="50%" 表示每个图表将占据页面宽度的一半,因此两个图表将并排显示。height="400px" 设置每个图表的高度为 400px,可以根据需要调整这个值。
增加标题
在数据可视化的场景中,需要给这个页面增加一个标题,在这里,可以使用一个空的饼图来实现,也就是只需要展示标题而不需要展示饼图的数据。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page
from pyecharts import options as opts
import random
# 创建饼图,只显示标题
big_title = (
Pie(init_opts=opts.InitOpts(width="50%", height="50px"))
.set_global_opts(
title_opts=opts.TitleOpts(
title="数据可视化大屏",
title_textstyle_opts=opts.TextStyleOpts(
font_size=40, # 调整字体大小
font_weight="bold", # 可选:字体加粗
color="#000000" # 可选:字体颜色
),
)
)
)
# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(width="50%", height="300px"))
bar.add_xaxis(["A", "B", "C", "D", "E"])
bar.add_yaxis("类别1", [random.randint(10, 100) for _ in range(5)], color="#d94e5d")
bar.add_yaxis("类别2", [random.randint(10, 100) for _ in range(5)], color="#50a3ba")
bar.set_global_opts(
title_opts=opts.TitleOpts(title="柱状图示例"),
xaxis_opts=opts.AxisOpts(name="类别"),
yaxis_opts=opts.AxisOpts(name="值"),
)
# 创建折线图
line = Line(init_opts=opts.InitOpts(width="50%", height="300px"))
line.add_xaxis(["Jan", "Feb", "Mar", "Apr", "May"])
line.add_yaxis("销售额", [random.randint(100, 500) for _ in range(5)], color="#ff7f50")
line.set_global_opts(
title_opts=opts.TitleOpts(title="折线图示例"),
xaxis_opts=opts.AxisOpts(name="月份"),
yaxis_opts=opts.AxisOpts(name="销售额"),
)
# 创建饼图
pie = Pie(init_opts=opts.InitOpts(width="50%", height="300px"))
pie.add("产品占比", [("产品A", 40), ("产品B", 30), ("产品C", 20), ("产品D", 10)])
pie.set_global_opts(title_opts=opts.TitleOpts(title="饼图示例"))
# 创建散点图
scatter = Scatter(init_opts=opts.InitOpts(width="50%", height="300px"))
x_data = [random.randint(1, 100) for _ in range(30)]
y_data = [random.randint(1, 100) for _ in range(30)]
scatter.add_xaxis(x_data)
scatter.add_yaxis("散点数据", y_data, symbol_size=8, color="#ff7f50")
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="散点图示例"),
xaxis_opts=opts.AxisOpts(name="X轴"),
yaxis_opts=opts.AxisOpts(name="Y轴"),
)
# 使用 Page 将多个图表放在一个页面中,调整为左右布局
page = Page(layout=Page.DraggablePageLayout, page_title="综合数据展示")
page.add(big_title, bar, line, pie, scatter)
# 渲染页面到 HTML 文件
page.render("combined_chart.html")
print("所有图表已合并到 combined_chart.html 文件中。")
通过这样的方式,可以呈现出标题的样式,然后再使用拖拽式的方法,来实现最终的数据可视化看板呈现。下图就是一个完成的数据可视化看板样式。
结束语
在这篇文章中,我们深入探讨了 Pyecharts —— 一款简单易用、功能强大的 Python 数据可视化库。通过直观的图表和丰富的自定义选项,Pyecharts 不仅能够帮助我们快速生成各类图表,还能够通过精细的配置满足不同场景的需求。从基础的柱状图、折线图到复杂的地理坐标系图、3D 曲面图,Pyecharts 都能轻松驾驭,展示数据的独特魅力。作为 Python 生态中的重要可视化工具,Pyecharts 的灵活性与易用性使得它在数据分析、报表生成、科研展示等领域得到了广泛的应用。而通过与前端技术结合,它还可以将图表嵌入到网页中,让数据的可视化更具交互性和视觉冲击力。
无论是数据分析师、科学家,还是开发者、产品经理,掌握 Pyecharts 都能让你在数据可视化的道路上走得更远。随着数据量的不断增长,如何用图表讲述一个清晰、有说服力的故事已经成为我们不断追求的目标。而 Pyecharts,正是一个帮助我们实现这一目标的得力助手。希望望这篇文章能够为你打开数据可视化的新世界。如果你还没有开始使用 Pyecharts,今天就可以动手试试。通过不断尝试和探索,你会发现更多有趣的图表效果,进而提升你对数据的理解和呈现能力。
数据可视化不仅仅是让数字“好看”,更是让数据“讲故事”。在这个信息爆炸的时代,掌握数据的可视化语言,正是与世界对话的钥匙。感谢阅读,也希望你在 Pyecharts 的世界里,能够享受创作的乐趣,发现更多无限的可能性。















