Matplotlib自定义CMAP报TypeError:int()参数不能为list如何解决
问题修复方案
错误根因
你代码触发TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'的直接原因是LinearSegmentedColormap.from_list()方法的N参数传值不符合要求:
N参数的作用是定义颜色映射的渐变色阶总数,仅接受单个正整数输入,你传入了列表类型的n_bin = [100, 20],类型不匹配直接触发报错。- 额外存在一个隐式报错风险:你自定义了变量
colors = [(0, 0.33, 0.73), (1, 0.26, 0.26)],后续调用colors.LogNorm()时会优先读取你定义的列表对象,无法正确调用matplotlib.colors下的LogNorm归一化方法。
修复后代码
# 先确认你已经导入所需依赖 import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap, ListedColormap, LogNorm x = filteredData2019['capacity'] y = filteredData2019['distance'] color_list = [(0, 0.33, 0.73), (1, 0.26, 0.26)] # 修改变量名避免和matplotlib.colors冲突 cmap_name = 'my_list' # N参数改为单个正整数,这里设为256是常用的平滑渐变色阶数,可按需调整 cm = LinearSegmentedColormap.from_list(cmap_name, colors=color_list, N=256) # 注意你之前的nump应该是numpy的别名,这里统一修正为np,按需替换即可 newcolors = np.vstack((testColor(np.linspace(0, 1, 128)), testColor2(np.linspace(0, 1, 128)))) newcmp = ListedColormap(newcolors, name='OrangeBlue') # norm直接调用导入的LogNorm,不要用colors.LogNorm避免变量冲突 fig = plt.hist2d(x, y, bins=(130, 130), cmap=cm, norm=LogNorm()) plt.savefig('heatScatterDistance2019.png', dpi=1000)
可选调整说明
- 如果你需要自定义色阶数量,可以按需修改
from_list方法的N参数值,仅需保证传入单个正整数即可。 - 代码中的
testColor、testColor2为你自定义的颜色插值函数,只要两个函数返回合法的RGB/RGBA数组即可正常运行。
内容的提问来源于stack exchange,提问作者Nik.clgn
相关产品推荐
相关产品推荐

