如何将Numpy数组转换为彩色表格或图像?附示例数组
嘿,我来给你分享两种实用的方法,把你的NumPy数组转换成彩色表格或者可视化图像,直接上代码和解释,你跟着来就行~
方法一:转换成彩色表格(用Pandas样式)
如果你想要保留数组的数值信息,同时用颜色直观展示数值大小,用Pandas的样式功能最合适。步骤很简单:
- 先把NumPy数组转换成Pandas的DataFrame
- 用
background_gradient方法给表格加上颜色渐变,数值越大颜色越深(或根据你选的配色)
示例代码:
import numpy as np import pandas as pd # 补全你给出的NumPy数组 arr = np.array([ [0, 0, 0, 0, 0, 0, 27, 541, 1296, 10000], [0, 0, 0, 0, 1, 44, 355, 1998, 3272, 10000], [0, 0, 0, 2, 18, 209, 1069, 3239, 4670, 10000], [0, 0, 0, 10, 96, 486, 1522, 3954, 5379, 10000], [0, 0, 2, 28, 216, 748, 2127, 4769, 6011, 10000], [0, 0, 18, 82, 379, 1200, 2867, 5395, 6528, 10000], [0, 3, 39, 147, 599, 1489, 3237, 5740, 6909, 10000], [0, 6, 48, 246, 759, 1777, 3610, 6034, 7144, 10000], [0, 12, 90, 324, 1009, 2072, 3980, 6365, 7466, 10000], [1, 12, 128, 420, 1218, 2325, 4260, 6640, 7680, 10000] ]) # 转成DataFrame df = pd.DataFrame(arr) # 生成彩色表格,用viridis配色,数值格式化保留整数 color_table = df.style.background_gradient(cmap='viridis').format("{:.0f}") # 在Jupyter环境中直接显示,或者保存成HTML文件 color_table.to_html('color_table.html') print("彩色表格已保存为HTML文件,打开即可查看")
方法二:转换成彩色热力图(用Matplotlib)
如果你更想要“图像”形式的可视化,用Matplotlib的imshow可以生成热力图,能直观展示数值的整体分布:
示例代码:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import Normalize # 补全后的NumPy数组 arr = np.array([ [0, 0, 0, 0, 0, 0, 27, 541, 1296, 10000], [0, 0, 0, 0, 1, 44, 355, 1998, 3272, 10000], [0, 0, 0, 2, 18, 209, 1069, 3239, 4670, 10000], [0, 0, 0, 10, 96, 486, 1522, 3954, 5379, 10000], [0, 0, 2, 28, 216, 748, 2127, 4769, 6011, 10000], [0, 0, 18, 82, 379, 1200, 2867, 5395, 6528, 10000], [0, 3, 39, 147, 599, 1489, 3237, 5740, 6909, 10000], [0, 6, 48, 246, 759, 1777, 3610, 6034, 7144, 10000], [0, 12, 90, 324, 1009, 2072, 3980, 6365, 7466, 10000], [1, 12, 128, 420, 1218, 2325, 4260, 6640, 7680, 10000] ]) # 设置画布大小 fig, ax = plt.subplots(figsize=(10, 8)) # 归一化数值,解决数组内数值差距过大导致颜色分布不均的问题 norm = Normalize(vmin=arr.min(), vmax=arr.max()) im = ax.imshow(arr, cmap='viridis', norm=norm) # 添加颜色条,标注数值对应颜色 fig.colorbar(im, ax=ax, label='数值大小') # 给每个单元格标注具体数值,自动适配文字颜色 for i in range(arr.shape[0]): for j in range(arr.shape[1]): text_color = "white" if arr[i,j] > arr.max()/2 else "black" ax.text(j, i, arr[i, j], ha="center", va="center", color=text_color) # 设置标题 ax.set_title('NumPy数组彩色热力图') plt.show() # 保存高清图像 plt.savefig('color_heatmap.png', dpi=300, bbox_inches='tight')
小提示
- 你可以替换
cmap参数的取值,比如'plasma'、'coolwarm'等,Matplotlib内置了几十种配色方案 - 如果数组内数值跨度极大,
Normalize归一化能让颜色过渡更自然,避免大部分区域颜色一致 - 彩色表格适合需要精确查看数值的场景,热力图更适合快速观察数值的整体分布规律
内容的提问来源于stack exchange,提问作者sten
相关产品推荐
相关产品推荐

