matplotlib热图一些条目缺失值

时间:2017-12-07 00:53:16

标签: matplotlib plot grid heatmap

现在我的数据看起来像这样:

nn = ["1W", "1F", "1V",,,,,"2W", "2F", "2V",,,,,"260W", 261F', "261V",,,,]

基本上每个数字都有相同数量的字母。总共19个字母。我有4798个号码。基本上,我的名单中有4978 * 19分。

我有另一个列表如下:

value=[1.15, 0.67, 0.88..........]

每个值对应于我的nn列表中的字符。这意味着我的值列表中有4978 * 19个值。

基本上,我想要一个2D网格图,其中x轴对应于数字,y轴对应于字母。每个单元格代表该值。我需要不同的颜色来呈现不同的价值观。也许一种颜色涵盖了一系列的价值观。比如红色代表1-10,蓝色代表10-20? 为了更好地了解我想要绘制的内容。我手绘了一个可视化的情节。

enter image description here

我可以将我的nn列表分成x-aixs和y-axis。

x_axis = [1,2,3,.......4978]

y_axis = ["W", "V", "F", .....] #19 in total

我可能遇到的一个问题是因为我有这么多数字。情节看起来很棒。所以也许我可以将一个大屁股情节分成子图?

此外,我的值列表中的某些条目可能缺少数据,如值[100] ='',或类似值[101] ='无穷大'。点是len(值)仍然等于4978 * 19。所以我也想要一些颜色来表示数据不足。

1 个答案:

答案 0 :(得分:1)

鉴于您对nn所展示的内容,看起来相应的值是有序的。 因此,我认为您可以将列表转换为2D NumPy数组

values = np.array(values).reshape((19, 4978))

然后使用plt.imshow(values)绘制它们。例如,

import numpy as np
import matplotlib.pyplot as plt

# generate some random values
values = np.random.random(19*4978).tolist()

# convert the list to a 2D NumPy array
values = np.array(values).reshape((19, 4978))
h, w = values.shape

fig, ax = plt.subplots()
plt.imshow(values)
plt.colorbar()
plt.yticks(np.arange(h), list('PNIYLKCVFWABCDEFGHI'))
ax.set_aspect(w/h)
plt.show()

enter image description here

请注意,虽然默认色图,viridis,并不像示例那样丰富多彩 你画了,它确实有一些very interesting features。也许是最多的 重要的是颜色的“强度”很好地对应于a 单调增加规模。因此,您可以直观地“读取”该值 由图中的颜色表示。使用的情节不能说同样的情节 彩色jet色彩映射,或者像你提出的1-10色彩映射 红色和10--20是蓝色等。读者将被迫 不断地参考颜色栏或图例来检查之间的对应关系 颜色和价值观。