Matplotlib散点图报错:TypeError: unhashable type: 'numpy.ndarray'求助
解决Matplotlib中
TypeError: unhashable type: 'numpy.ndarray'的问题 这个错误我之前在旧版本Matplotlib上碰到过,和你描述的情况完全一致——平台上跑正常本地报错,本质就是Matplotlib版本兼容性问题。
问题根源
你用的本地Matplotlib版本(结合Python3.6来看,大概率是3.1.0之前的旧版本)在处理颜色参数时,会尝试把传入的值作为缓存键存储,但numpy数组是不可哈希的类型,直接传入就触发了这个错误。而Coursera平台上的Matplotlib版本更新,已经修复了这个限制,允许直接传入numpy数组作为颜色参数。
具体解决方案
方案1:升级Matplotlib(推荐)
因为你用的是Miniconda环境,直接执行以下命令升级到兼容Python3.6的最新稳定版:
conda install -c conda-forge matplotlib>=3.1.0
注:Python3.6最高支持Matplotlib 3.3.4版本,这个版本已经修复了该问题。
方案2:临时适配旧版本(仅当无法升级时用)
如果暂时不能升级库,就把传入的numpy数组转换成可哈希的类型,比如:
- 如果是单个颜色的数组(比如
np.array([0.2, 0.4, 0.6])),转成元组:c = tuple(your_color_array) - 如果是单元素的颜色数组,直接提取标量:
c = your_color_array.item() - 如果是批量颜色数组,转成列表格式:
c = your_color_array.tolist()
验证方法
升级或修改代码后,先运行一行测试代码确认问题解决:
import numpy as np import matplotlib.pyplot as plt plt.scatter([1,2,3], [4,5,6], c=np.array([0.1, 0.5, 0.9])) plt.show()
内容的提问来源于stack exchange,提问作者Tom Hale
相关产品推荐
相关产品推荐

