Matplotlib使用十六进制字符串色值报TypeError该如何处理
十六进制颜色数组Matplotlib绘图解决方案
错误原因
pcolormesh 接口默认要求输入数值型网格数据,内部通过色映射规则转换为颜色,无法直接识别字符串格式的十六进制色值,因此抛出类型错误。
解决方案
方案1:用imshow直接渲染(推荐,适配像素级绘图场景)
imshow 原生支持RGBA格式的栅格数据,只需要先把十六进制色值转换为RGBA数值数组即可使用,代码更简洁,像素对齐精度更高:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import to_rgba # 你的原始颜色数组 z = np.asanyarray(pixel_arr) # 逐元素转换为RGBA四元组,最终得到形状为(100,100,4)的浮点数组 rgba_arr = np.array([[to_rgba(color) for color in row] for row in z]) fig, ax = plt.subplots() # origin参数控制y轴方向:upper对应数组第一行在图像顶部,lower对应第一行在底部 # extent参数对应x、y轴的坐标范围,和你原有x、y的0-100范围对齐 ax.imshow(rgba_arr, origin='upper', extent=[0, 100, 0, 100]) plt.show()
方案2:自定义色表适配pcolormesh
如果必须使用pcolormesh接口,可以生成索引数组搭配自定义色表实现:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap z = np.asanyarray(pixel_arr) # pcolormesh的坐标参数是网格边界,长度需要比像素数量多1 x = np.arange(0, 101, 1) y = np.arange(0, 101, 1) # 生成和颜色一一对应的索引数组 idx_arr = np.arange(z.size).reshape(z.shape) # 用你的十六进制颜色数组生成自定义色表 custom_cmap = ListedColormap(z.flatten()) fig, ax = plt.subplots() ax.pcolormesh(x, y, idx_arr, cmap=custom_cmap) plt.show()
注意事项
- 如果需要关闭坐标轴的边框、刻度,可调用
ax.axis('off')实现纯像素图展示 - 两种方案都不需要额外做数值归一化、色映射调整,完全保留你原始颜色数组的定义
内容的提问来源于stack exchange,提问作者F1rools22
相关产品推荐
相关产品推荐

