You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中重现指定瓷砖图(优先使用Matplotlib/Seaborn)

如何在Python中重现指定瓷砖图(优先使用Matplotlib/Seaborn)

嘿,我懂你想重现这种带固定标签的瓷砖图的需求了——确实直接用普通热力图总觉得差点意思,这里我给你两个用Matplotlib和Seaborn实现的方案,应该能完美匹配你的预期:

方案一:Seaborn Heatmap 自定义标注版

Seaborn的heatmap本身就是做这种规整瓷砖图的利器,我们可以借助它快速搞定颜色映射和单元格布局,再手动添加自定义的固定标签,比直接用默认标注灵活多了:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 1. 准备模拟数据:颜色对应的数值矩阵(也可以用自定义颜色映射,按需调整)
color_values = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# 2. 准备每个单元格的固定标签,完全自定义
cell_labels = np.array([
    ["A1", "B1", "C1"],
    ["A2", "B2", "C2"],
    ["A3", "B3", "C3"]
])

# 3. 绘制基础热力图
plt.figure(figsize=(8, 6))
ax = sns.heatmap(
    color_values,
    annot=False,  # 关闭自动数值标注,我们自己加自定义文本
    cmap="coolwarm",  # 替换成你需要的配色方案,比如"viridis"、"Pastel1"
    cbar=True,  # 不需要颜色条的话改成False
    linewidths=1,  # 单元格之间的白色分隔线宽度
    linecolor="white"
)

# 4. 逐个添加自定义固定标签
for i in range(color_values.shape[0]):
    for j in range(color_values.shape[1]):
        ax.text(
            j + 0.5, i + 0.5,  # 定位到单元格中心
            cell_labels[i, j],
            ha="center", va="center",
            color="black",  # 标签颜色可以根据单元格背景色调整,比如浅色背景用黑色,深色用白色
            fontsize=12
        )

# 5. 优化样式(可选)
ax.set_xticklabels([])  # 去掉默认的x轴刻度
ax.set_yticklabels([])  # 去掉默认的y轴刻度
plt.title("自定义标签瓷砖图(Seaborn实现)")
plt.show()

这个方案的好处是:借助Seaborn的成熟逻辑快速搞定颜色和布局,自定义标注能精准控制每个单元格的显示内容,完全符合你要的“固定标签+颜色瓷砖”的效果。

方案二:Matplotlib 手动绘制瓷砖(更灵活)

如果你的图不需要颜色和数值绑定(比如直接指定每个瓷砖的颜色),那直接用Matplotlib的图形补丁手动绘制会更自由,完全摆脱热力图的数值依赖:

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# 1. 定义瓷砖的基础参数
rows = 3  # 行数
cols = 3  # 列数
tile_size = 1.0  # 每个瓷砖的边长
# 自定义每个瓷砖的颜色,直接用十六进制色码或Matplotlib支持的颜色名称
tile_colors = [
    ["#FFAAAA", "#FFCCAA", "#FFEEAA"],
    ["#AAFFAA", "#AACCFF", "#AAAAFF"],
    ["#EEAAFF", "#CCAAFF", "#AAAAFF"]
]
# 自定义每个单元格的标签
cell_labels = [
    ["A1", "B1", "C1"],
    ["A2", "B2", "C2"],
    ["A3", "B3", "C3"]
]

# 2. 创建画布和轴
fig, ax = plt.subplots(figsize=(8, 6))

# 3. 逐个绘制瓷砖和标签
for i in range(rows):
    for j in range(cols):
        # 绘制瓷砖矩形
        rect = Rectangle(
            (j * tile_size, i * tile_size),  # 瓷砖左下角的坐标
            tile_size, tile_size,  # 瓷砖的宽和高
            facecolor=tile_colors[i][j],
            edgecolor="white",  # 单元格之间的分隔线颜色
            linewidth=2
        )
        ax.add_patch(rect)
        
        # 在瓷砖中心添加标签
        ax.text(
            j * tile_size + tile_size/2, i * tile_size + tile_size/2,
            cell_labels[i][j],
            ha="center", va="center",
            color="black",
            fontsize=12
        )

# 4. 调整轴范围和样式
ax.set_xlim(0, cols * tile_size)
ax.set_ylim(0, rows * tile_size)
ax.set_aspect("equal")  # 保证瓷砖是正方形(如果需要矩形可以去掉)
ax.set_xticks([])  # 隐藏默认刻度
ax.set_yticks([])
plt.title("手动绘制瓷砖图(Matplotlib实现)")
plt.show()

这个方案的优势是完全灵活——你可以随意调整每个瓷砖的大小、颜色,甚至是不规则布局,适合你的图有特殊结构的场景。

如果你的原图有更复杂的细节(比如不同大小的瓷砖、特殊的标签样式),都可以基于这两个方案修改:比如调整tile_size、颜色列表、标签的字体/颜色,或者修改分隔线的粗细和颜色。

备注:内容来源于stack exchange,提问作者kohoutek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:49:29