数据分析 — 动画图 pyecharts

目录

一、概念

Pyecharts 是一个基于 Echarts 的 Python 可视化库,它通过 Python 生成 Echarts 的图表,并支持多种常见的图表类型,如折线图、柱状图、散点图、饼图等。

官网地址:https://pyecharts.org/#/zh-cn/intro

二、安装和导入

pip install pyecharts

from pyecharts.charts import * # 从 pyecharts.charts 模块中导入所有类

三、绘图逻辑

1、选择图表类型

2、声明图形类

3、选择全局变量

4、显示及保存图表

四、绘图

1、柱状图

python 复制代码
from pyecharts.charts import Bar  # 从 pyecharts.charts 模块中导入 Bar 类

# 定义月份和对应的消费金额数据
months = ['一月', '二月', '三月', '四月', '五月', '六月']
cost = [1200, 1500, 1800, 1400, 1600, 2000]

# 创建一个 Bar 对象
bar = (
    Bar()  # 调用 Bar 类的构造函数
    .add_xaxis(months)  # 添加 x 轴的数据,即月份
    .add_yaxis('消费金额', cost)  # 添加 y 轴的数据,即消费金额,'消费金额' 为系列的名称
)

# 将图表保存为 HTML 文件,路径为 './bar.html'
bar.render('./bar.html')

2、折线图

python 复制代码
# 从 pyecharts.charts 模块中导入 Line 类
from pyecharts.charts import Line

# 定义一周的日期和对应的温度、湿度数据
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
temperatures = [28, 29, 30, 32, 31, 30, 29]
humidity = [40, 50, 70, 65, 45, 55]

# 创建一个 Line 对象
line = (
    Line()  # 调用 Line 类的构造函数
    .add_xaxis(days)  # 添加 x 轴的数据,即日期
    .add_yaxis('折线图1', temperatures)  # 添加第一条 y 轴的数据,即温度,'折线图1' 为系列的名称
    .add_yaxis('折线图2', humidity)  # 添加第二条 y 轴的数据,即湿度,'折线图2' 为系列的名称
)

# 将图表保存为 HTML 文件,路径为 './line.html'
line.render('./line.html')

3、散点图

python 复制代码
from pyecharts.charts import Scatter  # 从 pyecharts.charts 模块中导入 Scatter 类

# 定义一周的日期和对应的温度、湿度数据
cities = ['北京', '上海', '广州', '深圳', '成都', '重庆']
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
temperatures = [32, 33, 30, 31, 28, 30]
humidity = [40, 50, 70, 65, 45, 55]

# 创建一个 Scatter 对象
scatter = (
    Scatter()  # 调用 Scatter 类的构造函数
    .add_xaxis(days)  # 添加 x 轴的数据,即日期
    .add_yaxis('温度', temperatures)  # 添加第一条 y 轴的数据,即温度,'温度' 为系列的名称
    .add_yaxis('湿度', humidity)  # 添加第二条 y 轴的数据,即湿度,'湿度' 为系列的名称
)

# 将图表保存为 HTML 文件,路径为 './scatter.html'
scatter.render('./scatter.html')

4、饼图

python 复制代码
from pyecharts.charts import Pie  # 从 pyecharts.charts 模块中导入 Pie 类

# 定义水果和对应的销量数据
fruits = ['苹果', '香蕉', '橙子', '草莓', '葡萄']
sales = [45, 30, 25, 20, 15]
# 将水果和销量数据组合成一个列表
data = [list(z) for z in zip(fruits, sales)]

# 创建一个 Pie 对象
pie = (
    Pie()  # 调用 Pie 类的构造函数
    .add(  # 添加数据
        series_name='水果销量',  # 设置系列的名称
        data_pair=data,  # 设置数据对,包含水果和对应的销量
    )
)

# 将图表保存为 HTML 文件,路径为 './pie.html'
pie.render('./pie.html')

5、南丁格尔图

python 复制代码
from pyecharts.charts import Pie  # 从 pyecharts.charts 模块中导入 Pie 类
from pyecharts import options as opts  # 从 pyecharts.options 模块中导入 opts 类

# 定义水果和对应的销量数据
fruits = ['苹果', '香蕉', '橙子', '草莓', '葡萄']
sales = [45, 30, 25, 20, 15]
# 将水果和销量数据组合成一个列表
data = [list(z) for z in zip(fruits, sales)]

# 创建一个 Pie 对象,并设置半径、标签格式和玫瑰图样式
pie2 = (
    Pie()  # 调用 Pie 类的构造函数
    .add(  # 添加数据
        series_name='水果销量',  # 设置系列的名称
        data_pair=data,  # 设置数据对,包含水果和对应的销量
        radius=['40%', '60%'],  # 设置饼图的半径范围
        label_opts=opts.LabelOpts(formatter="{b}:{d}%"),  # 设置标签的格式,显示水果名称和销量占比
        rosetype="radius"  # 设置玫瑰图样式,即设置为半径模式
    )
)

# 将图表保存为 HTML 文件,路径为 './pie_radius.html'
pie2.render('./pie2.html')

6、Geo() 地理坐标第

python 复制代码
from pyecharts.charts import Geo  # 从 pyecharts.charts 模块中导入 Geo 类
from pyecharts import options as opts  # 从 pyecharts.options 模块中导入 opts 类
import random  # 导入 random 模块

# 定义省份数据,以及每个省份的随机数据(模拟数据)
province = [
    '广东', '湖北', '湖南', '四川', '重庆', '黑龙江',
    '浙江', '山西', '河北', '安徽', '河南', '山东', '西藏'
]
data = [(i, random.randint(50, 150)) for i in province]

# 创建一个 Geo 对象,并设置地图类型为 "china"
geo = (
    Geo()  # 调用 Geo 类的构造函数
    .add_schema(maptype="china")  # 设置地图类型为中国地图
    .add("", data)  # 添加数据,data 中包含省份和对应的随机数据
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 设置系列的标签选项,显示省份名称
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(  # 设置全局的视觉映射选项
            is_piecewise=True,  # 设置为分段型视觉映射
            pieces=[
                {'min': 50, 'max': 100, 'label': '50-100'},  # 视觉映射的分段设置
                {'min': 100, 'max': 150, 'label': '100-150'}
            ]
        )
    )
)

# 将图表保存为 HTML 文件,路径为 './geo.html'
geo.render('./geo.html')

7、Map() 绘制区域

python 复制代码
from pyecharts.charts import Map  # 从 pyecharts.charts 模块中导入 Map 类
from pyecharts import options as opts  # 从 pyecharts.options 模块中导入 opts 类
import random  # 导入 random 模块

# 定义省份数据,以及每个省份的随机数据(模拟数据)
province = [
    '广东省', '湖北省', '湖南省', '四川省', '重庆市', '黑龙江省',
    '浙江省', '山西省', '河北省', '安徽省', '河南省', '山东省', '西藏自治区'
]
data = [(i, random.randint(50, 250)) for i in province]
# 创建一个 Map 对象,并添加数据
map = Map()
map.add('确诊人数', data)

# 设置全局选项,包括标题和视觉映射的设置
map.set_global_opts(
    title_opts=opts.TitleOpts(title='全国疫情地图'),  # 设置地图的标题
    visualmap_opts=opts.VisualMapOpts(  # 设置视觉映射的选项
        is_piecewise=True,  # 设置为分段型视觉映射
        pieces=[
            {'min': 50, 'max': 99, 'label': '50-99人', 'color': 'yellow'},  # 视觉映射的分段设置
            {'min': 100, 'max': 149, 'label': '100-149人', 'color': 'pink'},
            {'min': 150, 'max': 199, 'label': '150-199人', 'color': 'green'},
            {'min': 200, 'max': 250, 'label': '200-250人', 'color': 'red'}
        ]
    )
)

# 将图表保存为 HTML 文件,路径为 './map.html'
map.render('./map.html')

8、词云图

python 复制代码
from pyecharts.charts import WordCloud  # 从 pyecharts.charts 模块中导入 WordCloud 类

# 定义词云数据,每个元组包含单词和对应的频率
words = [
    ("economy", 1230),
    ("jude", 124),
    ("dont", 436),
    ("make", 255),
    ("it", 247),
    ("bad", 244),
    ("Take", 138),
    ("a sad song", 184),
    ("and", 12),
    ("make", 165),
    ("it", 247),
    ("better", 182),
    ("remember", 255),
    ("to", 150),
    ("let", 162),
    ("her", 266),
    ("into", 60),
    ("your", 82),
    ("heart", 173),
    ("then", 365),
    ("you", 360),
    ("can", 282),
    ("start", 273),
    ("make", 265),
]

# 创建一个 WordCloud 对象,并添加词云数据
wc = (
    WordCloud()  # 调用 WordCloud 类的构造函数
    .add("", words)  # 添加词云数据,空字符串表示没有系列名称
)

# 将词云图保存为 HTML 文件,路径为 './wc.html'
wc.render('./wc.html')

9、层叠图

python 复制代码
from pyecharts.charts import Bar, Line  # 从 pyecharts.charts 模块中导入 Bar 和 Line 类

# 定义横轴数据(x 轴)
x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
# 定义柱状图的纵轴数据
y_data_bar = [123, 153, 89, 107, 98, 23]
# 定义折线图的纵轴数据
y_data_line = [153, 107, 23, 89, 123, 107]

# 创建柱状图对象,添加横轴和纵轴数据
bar = (
    Bar()  # 调用 Bar 类的构造函数
    .add_xaxis(x_data)  # 添加横轴数据
    .add_yaxis('', y_data_bar)  # 添加柱状图的纵轴数据,空字符串表示没有系列名称
)
# 创建折线图对象,添加横轴和纵轴数据
line = (
    Line()  # 调用 Line 类的构造函数
    .add_xaxis(x_data)  # 添加横轴数据
    .add_yaxis('', y_data_line)  # 添加折线图的纵轴数据,空字符串表示没有系列名称
)

# 将折线图和柱状图进行重叠
overlap = line.overlap(bar)
# 将重叠图保存为 HTML 文件,路径为 './overlap.html'
overlap.render('./overlap.html')

10、3D 图

python 复制代码
from pyecharts.charts import Bar3D  # 从 pyecharts.charts 模块中导入 Bar3D 类

# 定义三维柱状图的数据,数据为一个二维列表
data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
# 创建一个三维柱状图对象,添加数据
bar3d = Bar3D()  # 调用 Bar3D 类的构造函数
bar3d.add("", data)  # 添加三维柱状图的数据,空字符串表示没有系列名称

# 将三维柱状图保存为 HTML 文件,路径为 './bar3d.html'
bar3d.render('./bar3d.html')

11、仪表板

python 复制代码
import numpy as np  # 导入 NumPy 库并使用别名 np
from pyecharts.charts import *  # 从 pyecharts.charts 模块中导入所有类
from pyecharts.charts import Page  # 从 pyecharts.charts 模块中导入 Page 类

# 定义柱状图函数
def bar():
    # 定义横轴和纵轴数据
    x_data = ["水笔", "铅笔", "钢笔", "圆珠笔"]
    y_data = [40, 30, 98, 42]

    # 创建柱状图对象,添加横轴和纵轴数据
    bar = (
        Bar()
        .add_xaxis(x_data)
        .add_yaxis("", y_data)
    )
    return bar

# 定义折线图函数
def line():
    # 定义横轴和纵轴数据
    x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
    y_data = [123, 153, 89, 107, 98, 23]

    # 创建折线图对象,添加横轴和纵轴数据
    line = (
        Line()
        .add_xaxis(x_data)
        .add_yaxis('呵呵', y_data)
    )
    return line

# 定义散点图函数
def scatter():
    # 生成正弦函数数据
    x = np.linspace(0, 2 * np.pi, 100)
    y = np.sin(x)

    # 创建散点图对象,添加横轴和纵轴数据
    scatter = (
        Scatter()
        .add_xaxis(x)
        .add_yaxis("正弦", y)
    )
    return scatter

# 定义饼图函数
def pie():
    # 定义饼图数据
    num = [110, 136, 108, 48, 111, 112, 103]
    lab = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
    data_pair_ = list(zip(lab, num))

    # 创建饼图对象,添加数据
    pie = (
        Pie()
        .add('饼图',
             data_pair=data_pair_,
             rosetype='radius',
             radius=["20%", "45%"])
    )
    return pie

# 创建一个可拖动页面,设置页面标题
page = Page(layout=Page.DraggablePageLayout, page_title='haha')

# 添加各种图表到页面
page.add(
    bar(),
    line(),
    scatter(),
    pie()
)

# 将页面保存为 HTML 文件,路径为 './大屏.html'
page.render('./大屏.html')

拖动图表排列顺序后,点击 Save Config 按钮,将下载的 chart_config.json 保存至 大屏.html 同目录下

python 复制代码
from pyecharts.charts import Page  # 从 pyecharts.charts 模块中导入 Page 类
# 创建一个可拖动页面,设置页面标题
page = Page(layout=Page.DraggablePageLayout, page_title='haha')
# 保存配置后的文件
# page.save_resize_html(原html文件,拖拽保存的配置文件,成品的保存路径)
page.save_resize_html(r'./大屏.html',cfg_file='chart_config.json',dest="./大屏显示.html")

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

相关推荐
Gitpchy1 天前
Day 20 奇异值SVD分解
python·机器学习
MediaTea1 天前
Python 第三方库:matplotlib(科学绘图与数据可视化)
开发语言·python·信息可视化·matplotlib
草莓熊Lotso1 天前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
gddkxc1 天前
AI CRM中的数据分析:悟空AI CRM如何帮助企业优化运营
人工智能·信息可视化·数据分析
我是李武涯1 天前
PyTorch Dataloader工作原理 之 default collate_fn操作
pytorch·python·深度学习
Kratzdisteln1 天前
【Python】绘制椭圆眼睛跟随鼠标交互算法配图详解
python·数学·numpy·pillow·matplotlib·仿射变换
maxruan1 天前
PyTorch学习
人工智能·pytorch·python·学习
唐古乌梁海1 天前
【python】在Django中,执行原生SQL查询
python·sql·django
程序员大雄学编程1 天前
「用Python来学微积分」5. 曲线的极坐标方程
开发语言·python·微积分
派可数据BI可视化1 天前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析