如何根据JSON数值区间为6*6网格配色并生成可视化图像
实现方案
最简便的可复现方案是基于Python完成数据读取、网格转换、颜色映射、图像导出全流程,不需要依赖设计工具或前端代码。
依赖安装
先安装需要的第三方库,执行命令:pip install numpy matplotlib
核心实现流程
- 读取存储数据的JSON文件,提取
fsr字段对应的数值列表,先校验列表长度为36,避免网格转换出错 - 将长度为36的一维数值列表按行优先规则(前6个值为第一行,依次顺延)转换为6*6的二维矩阵
- 自定义数值区间与对应显示颜色的映射规则,参考配置如下:
可根据实际需求调整区间边界与对应色值:
- 数值 < 140:浅蓝色 #e3f2fd
- 140 ≤ 数值 < 150:淡绿色 #c8e6c9
- 150 ≤ 数值 < 160:橙黄色 #fff59d
- 数值 ≥ 160:浅红色 #ffccbc
- 逐单元格匹配对应颜色绘制正方形网格,可按需在单元格内标注原始数值方便核对
- 隐藏多余坐标轴、调整画布边距后导出为本地图像文件
参考实现代码
import json import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap, BoundaryNorm # 读取本地JSON文件,替换为你的实际文件路径 with open("data.json", "r", encoding="utf-8") as f: raw_data = json.load(f) fsr_list = raw_data["fsr"] # 转换为6*6二维网格 grid_data = np.array(fsr_list).reshape(6, 6) # 配置区间与颜色映射 interval_bounds = [130, 140, 150, 160, 170] # 区间分割点 match_colors = ["#e3f2fd", "#c8e6c9", "#fff59d", "#ffccbc"] # 各区间对应色值 color_map = ListedColormap(match_colors) norm_rule = BoundaryNorm(interval_bounds, color_map.N) # 绘制网格 fig, ax = plt.subplots(figsize=(6, 6), dpi=150) grid_layer = ax.imshow(grid_data, cmap=color_map, norm=norm_rule) # 可选:在每个单元格中标注原始数值 for row in range(6): for col in range(6): ax.text(col, row, grid_data[row, col], ha="center", va="center", color="#212121", fontsize=9) # 隐藏坐标轴与多余边框 ax.set_xticks([]) ax.set_yticks([]) plt.gca().set_frame_on(False) # 导出为图片文件 plt.savefig("fsr_color_grid.png", bbox_inches="tight", pad_inches=0.1) plt.close()
常用调整项
- 若需要按列优先排布数值,将reshape参数修改为
reshape(6, 6, order="F")即可 - 可自由修改区间分割点、色值、导出分辨率、单元格字号等参数适配需求
- 若需要添加颜色图例说明各区间含义,在导出前添加代码
plt.colorbar(grid_layer, fraction=0.046, pad=0.04)即可 - 支持导出为png、jpg、svg等常见图像格式,修改savefig的文件名后缀即可切换格式
内容的提问来源于stack exchange,提问作者Jaspreet Singh
相关产品推荐
相关产品推荐

