100天精通Python(可视化篇)——第97天:Pyecharts绘制多种炫酷热力图参数说明+代码实战

文章目录

  • 专栏导读
  • 1. 热力图介绍
  • 2. 基础热力图
  • 3. 添加色块数值
  • 4. 添加热力标尺
  • 5. 修改色块颜色
  • 6. 不同区间颜色
  • 7. 炫酷模块1
  • 8. 炫酷模块2
  • 书籍推荐

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

1. 热力图介绍

  • 热力图(Heat Map)是一种基于色彩对数据集进行可视化的方法,可表现出数据空间内各点之间的相关性,从而揭示影响结果的因素的变化趋势。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。
  • 从数据结构来划分,热力图一般分为两种。第一,表格型热力图,也称色块图。它需要 2 个分类字段和 1 个数值字段,分类字段确定 x、y 轴,将图表划分为规整的矩形块。数值字段决定了矩形块的颜色。第二,非表格型热力图,或曰平滑的热力图,它需要 3 个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色)。

特点:热力图的最大特点就是能够穿透和揭示大量数据之间的空间关系,将复杂的结果可视化。它以色调的方式展示变量之间的关系,不同的色调对应着不同的值范围,渐变的颜色向着更多的变量、密集的空间和复杂的表现形式揭示变量之间的关系。

应用场景

  • 热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。
  • 热力图在各行业有着广泛的应用,尤其是在市场营销、数据分析及空间数据处理领域,比如用热力图可以分析航班的晚间到达率,可以分析疾病的集中地区,可以整理出某个行业的流行程度等。

2. 基础热力图

上述代码中,首先创建了一个data列表,其中每个元素代表一个数据点,包括x轴坐标、y轴坐标和数值。然后创建了一个HeatMap实例,并使用add_xaxis()和add_yaxis()方法设置x轴和y轴的标签,同时将数据传入add_yaxis()方法中。 最后在jupyter notebook中渲染图表:

from pyecharts import options as opts
from pyecharts.charts import HeatMap

# 构造热力图数据
data = [
    [0, 0, 5],
    [0, 1, 10],
    [0, 2, 20],
    [1, 0, 15],
    [1, 1, 25],
    [1, 2, 30],
    [2, 0, 35],
    [2, 1, 40],
    [2, 2, 45],
]

heatmap = (
    HeatMap()
    .add_xaxis(['A', 'B', 'C'])
    .add_yaxis("series0", ['1', '2', '3'], data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="基本热力图示例"),
        visualmap_opts=opts.VisualMapOpts(is_show=False), # 不显示热力标尺
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 不显示数字
)

# 在jupyter notebook中渲染图表
heatmap.render_notebook()

运行结果:

3. 添加色块数值

opts.LabelOpts()函数中is_show=True的时候,每个色块上显示对应的数值:

from pyecharts import options as opts
from pyecharts.charts import HeatMap

# 构造热力图数据
data = [
    [0, 0, 5],
    [0, 1, 10],
    [0, 2, 20],
    [1, 0, 15],
    [1, 1, 25],
    [1, 2, 30],
    [2, 0, 35],
    [2, 1, 40],
    [2, 2, 45],
]

heatmap = (
    HeatMap()
    .add_xaxis(['A', 'B', 'C'])
    .add_yaxis("series0", ['1', '2', '3'], data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="基本热力图示例"),
        visualmap_opts=opts.VisualMapOpts(is_show=False),
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 设置显示数字
)

# 在jupyter notebook中渲染图表
heatmap.render_notebook()

运行结果:

4. 添加热力标尺

opts.VisualMapOpts()函数中is_show=True的时候,会在旁边添加热力标尺,拖动热力标尺会突出对应色块:

from pyecharts import options as opts
from pyecharts.charts import HeatMap

# 构造热力图数据
data = [
    [0, 0, 5],
    [0, 1, 10],
    [0, 2, 20],
    [1, 0, 15],
    [1, 1, 25],
    [1, 2, 30],
    [2, 0, 35],
    [2, 1, 40],
    [2, 2, 45],
]

heatmap = (
    HeatMap()
    .add_xaxis(['A', 'B', 'C'])
    .add_yaxis("series0", ['1', '2', '3'], data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="基本热力图示例"),
        visualmap_opts=opts.VisualMapOpts(is_show=True), # 显示热力标尺
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 显示数字
)

# 在jupyter notebook中渲染图表
heatmap.render_notebook()

运行结果:
在这里插入图片描述

5. 修改色块颜色

在Pyecharts模块中,在visualmap_opts=opts.VisualMapOpts()函数可以使用range_color=[]参数来设置颜色范围。range_color参数接受一个包含颜色值的列表,用于定义热力图中不同数值对应的颜色。以下是一些常用的颜色值示例:

使用预定义的颜色名称:

  • ‘red’: 红色
  • ‘blue’: 蓝色
  • ‘green’: 绿色
  • ‘yellow’: 黄色
  • ‘orange’: 橙色
  • ‘purple’: 紫色

使用RGB颜色值:

  • ‘#FF0000’: 红色
  • ‘#0000FF’: 蓝色
  • ‘#00FF00’: 绿色
  • ‘#FFFF00’: 黄色
  • ‘#FFA500’: 橙色
  • ‘#800080’: 紫色

以下是一个示例代码,展示如何使用range_color参数设置颜色范围:

from pyecharts import options as opts
from pyecharts.charts import HeatMap

# 构造热力图数据
data = [
    [0, 0, 5],
    [0, 1, 10],
    [0, 2, 20],
    [1, 0, 15],
    [1, 1, 25],
    [1, 2, 30],
    [2, 0, 35],
    [2, 1, 40],
    [2, 2, 45],
]

heatmap = (
    HeatMap()
    .add_xaxis(['A', 'B', 'C'])
    .add_yaxis("series0", ['1', '2', '3'], data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="基本热力图示例"),
        visualmap_opts=opts.VisualMapOpts(is_show=True, range_color=['#0000FF','#00FF00']), # 显示热力标尺
       
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 显示数字
)

# 在jupyter notebook中渲染图表
heatmap.render_notebook()

运行结果:

6. 不同区间颜色

要绘制根据数值分割颜色,你可以使用visualmap_opts参数中的is_piecewise属性来实现。is_piecewise属性为True时,热力图会根据特定的区间范围设置不同的颜色,以突出区间。以下是一个示例代码:

from pyecharts import options as opts
from pyecharts.charts import HeatMap

# 构造热力图数据
data = [
    [0, 0, 5],
    [0, 1, 10],
    [0, 2, 20],
    [1, 0, 15],
    [1, 1, 25],
    [1, 2, 30],
    [2, 0, 35],
    [2, 1, 40],
    [2, 2, 45],
]

heatmap = (
    HeatMap()
    .add_xaxis(['A', 'B', 'C'])
    .add_yaxis("series0", ['1', '2', '3'], data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="基本热力图示例"),
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            is_piecewise=True,
            pieces=[
                {"min": 20, "color": "red"},
                {"max": 20, "color": "green"},
            ]), # 显示热力标尺
       
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 显示数字
)

# 在jupyter notebook中渲染图表
heatmap.render_notebook()

运行结果:

7. 炫酷模块1

import random
from pyecharts import options as opts
from pyecharts.charts import HeatMap
from pyecharts.faker import Faker

# 生成热力图数据
value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)]

# 创建 HeatMap 对象
c = (
    HeatMap()
    .add_xaxis(Faker.clock)  # 设置 x 轴数据
    .add_yaxis(
        "series0",  # 设置系列名称
        Faker.week,  # 设置 y 轴数据
        value,  # 设置热力图数据
        label_opts=opts.LabelOpts(is_show=True, position="inside"),  # 设置标签样式
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="HeatMap-Label 显示"),  # 设置标题
        visualmap_opts=opts.VisualMapOpts(),  # 设置视觉映射配置项
    )
   
)

# 在jupyter notebook中渲染图表
c.render_notebook() 

运行结果:

8. 炫酷模块2

import pyecharts.options as opts
from pyecharts.charts import HeatMap

hours = [
    "12a",
    "1a",
    "2a",
    "3a",
    "4a",
    "5a",
    "6a",
    "7a",
    "8a",
    "9a",
    "10a",
    "11a",
    "12p",
    "1p",
    "2p",
    "3p",
    "4p",
    "5p",
    "6p",
    "7p",
    "8p",
    "9p",
    "10p",
    "11p",
]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]

data = [
    [0, 0, 5],
    [0, 1, 1],
    [0, 2, 0],
    [0, 3, 0],
    [0, 4, 0],
    [0, 5, 0],
    [0, 6, 0],
    [0, 7, 0],
    [0, 8, 0],
    [0, 9, 0],
    [0, 10, 0],
    [0, 11, 2],
    [0, 12, 4],
    [0, 13, 1],
    [0, 14, 1],
    [0, 15, 3],
    [0, 16, 4],
    [0, 17, 6],
    [0, 18, 4],
    [0, 19, 4],
    [0, 20, 3],
    [0, 21, 3],
    [0, 22, 2],
    [0, 23, 5],
    [1, 0, 7],
    [1, 1, 0],
    [1, 2, 0],
    [1, 3, 0],
    [1, 4, 0],
    [1, 5, 0],
    [1, 6, 0],
    [1, 7, 0],
    [1, 8, 0],
    [1, 9, 0],
    [1, 10, 5],
    [1, 11, 2],
    [1, 12, 2],
    [1, 13, 6],
    [1, 14, 9],
    [1, 15, 11],
    [1, 16, 6],
    [1, 17, 7],
    [1, 18, 8],
    [1, 19, 12],
    [1, 20, 5],
    [1, 21, 5],
    [1, 22, 7],
    [1, 23, 2],
    [2, 0, 1],
    [2, 1, 1],
    [2, 2, 0],
    [2, 3, 0],
    [2, 4, 0],
    [2, 5, 0],
    [2, 6, 0],
    [2, 7, 0],
    [2, 8, 0],
    [2, 9, 0],
    [2, 10, 3],
    [2, 11, 2],
    [2, 12, 1],
    [2, 13, 9],
    [2, 14, 8],
    [2, 15, 10],
    [2, 16, 6],
    [2, 17, 5],
    [2, 18, 5],
    [2, 19, 5],
    [2, 20, 7],
    [2, 21, 4],
    [2, 22, 2],
    [2, 23, 4],
    [3, 0, 7],
    [3, 1, 3],
    [3, 2, 0],
    [3, 3, 0],
    [3, 4, 0],
    [3, 5, 0],
    [3, 6, 0],
    [3, 7, 0],
    [3, 8, 1],
    [3, 9, 0],
    [3, 10, 5],
    [3, 11, 4],
    [3, 12, 7],
    [3, 13, 14],
    [3, 14, 13],
    [3, 15, 12],
    [3, 16, 9],
    [3, 17, 5],
    [3, 18, 5],
    [3, 19, 10],
    [3, 20, 6],
    [3, 21, 4],
    [3, 22, 4],
    [3, 23, 1],
    [4, 0, 1],
    [4, 1, 3],
    [4, 2, 0],
    [4, 3, 0],
    [4, 4, 0],
    [4, 5, 1],
    [4, 6, 0],
    [4, 7, 0],
    [4, 8, 0],
    [4, 9, 2],
    [4, 10, 4],
    [4, 11, 4],
    [4, 12, 2],
    [4, 13, 4],
    [4, 14, 4],
    [4, 15, 14],
    [4, 16, 12],
    [4, 17, 1],
    [4, 18, 8],
    [4, 19, 5],
    [4, 20, 3],
    [4, 21, 7],
    [4, 22, 3],
    [4, 23, 0],
    [5, 0, 2],
    [5, 1, 1],
    [5, 2, 0],
    [5, 3, 3],
    [5, 4, 0],
    [5, 5, 0],
    [5, 6, 0],
    [5, 7, 0],
    [5, 8, 2],
    [5, 9, 0],
    [5, 10, 4],
    [5, 11, 1],
    [5, 12, 5],
    [5, 13, 10],
    [5, 14, 5],
    [5, 15, 7],
    [5, 16, 11],
    [5, 17, 6],
    [5, 18, 0],
    [5, 19, 5],
    [5, 20, 3],
    [5, 21, 4],
    [5, 22, 2],
    [5, 23, 0],
    [6, 0, 1],
    [6, 1, 0],
    [6, 2, 0],
    [6, 3, 0],
    [6, 4, 0],
    [6, 5, 0],
    [6, 6, 0],
    [6, 7, 0],
    [6, 8, 0],
    [6, 9, 0],
    [6, 10, 1],
    [6, 11, 0],
    [6, 12, 2],
    [6, 13, 1],
    [6, 14, 3],
    [6, 15, 4],
    [6, 16, 0],
    [6, 17, 0],
    [6, 18, 0],
    [6, 19, 0],
    [6, 20, 1],
    [6, 21, 2],
    [6, 22, 2],
    [6, 23, 6],
]
data = [[d[1], d[0], d[2] or "-"] for d in data]


c = (
    HeatMap()  # 创建热力图对象
    .add_xaxis(xaxis_data=hours)  # 添加 x 轴数据
    .add_yaxis(  # 添加 y 轴数据
        series_name="Punch Card",
        yaxis_data=days,
        value=data,
        label_opts=opts.LabelOpts(  # 设置标签样式
            is_show=True, color="#fff", position="bottom", horizontal_align="50%"
        ),
    )
    .set_series_opts()  # 设置系列配置项
    .set_global_opts(  # 设置全局配置项
        legend_opts=opts.LegendOpts(is_show=False),  # 不显示图例
        xaxis_opts=opts.AxisOpts(  # 设置 x 轴配置项
            type_="category",
            splitarea_opts=opts.SplitAreaOpts(  # 设置分割区域样式
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),
        yaxis_opts=opts.AxisOpts(  # 设置 y 轴配置项
            type_="category",
            splitarea_opts=opts.SplitAreaOpts(  # 设置分割区域样式
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),
        visualmap_opts=opts.VisualMapOpts(  # 设置视觉映射配置项
            min_=0, max_=10, is_calculable=True, orient="horizontal", pos_left="center"
        ),
    )
)

c.render_notebook()  # 在 Jupyter Notebook 中渲染图表

运行结果:
在这里插入图片描述

书籍推荐

《从零开始读懂量子力学》

从微小的原子到浩瀚的宇宙,从每一滴水到闪亮的钻石,从划破夜空的激光到你身边的手机……所有事物的背后都有量子力学在主宰!你看过世界级畅销书《三体》吗?是否会在其提到有关量子力学的现象时背后陡然升起一股冷气,以为自己看的不是科幻小说而是恐怖小说?哈哈,也许在看《三体》前,你应该先看看北京大学出版社倾力打造的科普书——《从零开始读懂量子力学》!
本书对量子力学做了严谨的科普,回避了复杂的数学表述和方程式,并力求对基本概念清晰解释,对科学原理准确表达。为了展示科学的力量,使阅读更加有趣,我们在介绍科学的过程中,还穿插了量子力学原理在技术领域中的应用,趣味性十足!
读过它后,你定能轻松看懂《三体》故事背后的玄机,更好地享受量子力学的奇幻世界!

抽奖送书老规矩(不点赞收藏中奖无效):注意记得关注博主不然中奖了还不知道!!!

  • 1. 点赞收藏文章
  • 2. 评论区留言:人生苦短,我用Python!!!(留言才能进入奖池,每人最多留言三条)
  • 3. 周六八点爬虫抽奖5人
  • 当当购买链接 :http://product.dangdang.com/28545398.html
  • 京东:https://item.jd.com/12862236.html

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年8月3日
下一篇 2023年8月3日

相关推荐