本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
- 热力图(Heat Map)是一种基于色彩对数据集进行可视化的方法,可表现出数据空间内各点之间的相关性,从而揭示影响结果的因素的变化趋势。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。
- 从数据结构来划分,热力图一般分为两种。第一,表格型热力图,也称色块图。它需要 2 个分类字段和 1 个数值字段,分类字段确定 x、y 轴,将图表划分为规整的矩形块。数值字段决定了矩形块的颜色。第二,非表格型热力图,或曰平滑的热力图,它需要 3 个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色)。
特点:热力图的最大特点就是能够穿透和揭示大量数据之间的空间关系,将复杂的结果可视化。它以色调的方式展示变量之间的关系,不同的色调对应着不同的值范围,渐变的颜色向着更多的变量、密集的空间和复杂的表现形式揭示变量之间的关系。
应用场景:
上述代码中,首先创建了一个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()
当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()
当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()
在Pyecharts模块中,在visualmap_opts=opts.VisualMapOpts()
函数可以使用range_color=[]
参数来设置颜色范围。range_color参数接受一个包含颜色值的列表,用于定义热力图中不同数值对应的颜色。以下是一些常用的颜色值示例:
使用预定义的颜色名称:
使用RGB颜色值:
以下是一个示例代码,展示如何使用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()
要绘制根据数值分割颜色,你可以使用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()
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()
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 中渲染图表