如何用Matplotlib imshow从列表字典绘制3×3热力图?
解决方案:将列表字典转换为Matplotlib imshow可用格式
方法1:纯Python核心功能(无需NumPy)
Matplotlib的imshow可直接接受二维嵌套列表作为输入,借助Python 3.7+字典的有序特性,直接提取字典值即可完成转换:
import matplotlib.pyplot as plt dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]} # 提取字典值组成二维列表,顺序与字典键插入顺序一致 SOMETHING = list(dictA.values()) plt.imshow(SOMETHING) # 设置y轴刻度标签为字典的键,实现A、B、C垂直排列 plt.yticks(ticks=[0, 1, 2], labels=list(dictA.keys())) # 可选:反转y轴,让A在底部、C在顶部(更符合常规阅读习惯) plt.gca().invert_yaxis() plt.show()
方法2:使用NumPy(更适合后续数据操作)
如果需要更灵活的数组处理,或兼容Python 3.6及以下无有序字典的版本,可通过NumPy转换为数组:
import matplotlib.pyplot as plt import numpy as np dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]} # 转换为NumPy二维数组 SOMETHING = np.array(list(dictA.values())) plt.imshow(SOMETHING) plt.yticks(ticks=[0, 1, 2], labels=list(dictA.keys())) plt.gca().invert_yaxis() plt.show()
关键说明
- 默认
imshow的y轴从上到下递增,因此list(dictA.values())的第一个元素(A)会显示在图的顶部,添加invert_yaxis()可反转y轴,让A位于底部。 - Python 3.7+的字典会保留键的插入顺序,无需额外排序即可保证A、B、C的垂直顺序;若使用旧版本Python,需手动指定键的顺序,比如
[dictA["A"], dictA["B"], dictA["C"]]。
内容的提问来源于stack exchange,提问作者Anthony Nash
相关产品推荐
相关产品推荐

