如何在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
相关产品推荐
相关产品推荐

