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

cidc1ykv  于 2023-08-06  发布在  Python
关注(0)|答案(2)|浏览(130)

我有一个列表字典:

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

字符串
我想使用Matplotlib imshow将数据显示为热图。A、B和C垂直(y)延伸,并且值是从左到右延伸的对应单元格值。这将导致3x 3图。
理想情况下,我希望将其保持在核心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()

6vl6ewon

6vl6ewon1#

假设字典值以正确的顺序添加(并且您是working with Python 3.6 or above),最简单的版本是:

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


...那么这可以通过将上面的plt.imshow()调用替换为:

plt.imshow(list(zip(*dictA.values())))


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

x7rlezfr

x7rlezfr2#

要使用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()

字符串

相关问题