从列表字典中绘制 Python Matplotlib imshow(热图)

问题描述 投票:0回答:2

我有一本列表词典:

dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}

我想使用 matplotlib imshow 将数据显示为热图。 A、B 和 C 垂直 (y) 排列,其值是从左到右排列的相应单元格值。这将产生 3x3 绘图。

理想情况下,我希望将其保留在核心 Python 中,并避免通过 numpy 等包进行冗长的数据类型争论,但如果没有帮助,那就没有帮助了 - 我只是希望它能够工作。

基础知识是:

import matplotlib.pyplot as plt

dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}
SOMETHING = #wrangling my dictionary to be "array-like"

plt.imshow(SOMETHING)
plt.show()

非常感谢。谢谢。

python matplotlib imshow
2个回答
1
投票

要使用 matplotlib 和给定的列表字典创建热图,您可以使用嵌套列表理解将字典转换为“类似数组”的格式。虽然 numpy 通常用于更复杂的数据操作,但您可以避免将它用于这个简单的任务。这是一种无需 numpy 即可实现热图的方法:

import matplotlib.pyplot as plt

# Your dictionary of lists
data_dict = {"A": [1, 2, 3], "B": [4, 5, 6], "C": [7, 8, 9]}

# Convert the dictionary into an array-like format (list of lists)
array_like_data = [[data_dict[col][row] for col in data_dict] for row in 
range(len(data_dict["A"]))]

# Create the heatmap
plt.imshow(array_like_data, cmap='viridis', aspect='auto', origin='upper')

# Add labels to the axes
plt.xticks(range(len(data_dict)), list(data_dict.keys()))
plt.yticks(range(len(data_dict["A"])), range(1, len(data_dict["A"]) + 1))

# Show the plot
plt.colorbar()
plt.show()

1
投票

如果您的字典值顺序正确,最简单的版本是:

import matplotlib.pyplot as plt

dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}
plt.imshow(dictA.values())
plt.show()

这将创建一个图像,其中的值按以下顺序排列(即每个字典值形成一行):

123
456
789

如果问题的意思是应生成以下顺序(即每个字典值形成一列):

147
258
369

...那么可以使用以下代码:

import matplotlib.pyplot as plt

dictA = {"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}
plt.imshow(list(zip(*dictA.values())))
plt.show()

感谢@mozway指出歧义并提供相应的第二个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.