使用matplotlib在网格中显示值

我正在尝试为一些数据生成热图,我的代码如下所示:

data = [['basis', 2007, 2008],

[1, 2.2, 3.4],

[2, 0, -2.2],

[3, -4.1, -2.5],

[4, -5.8, 1.2],

[5, -5.4, -3.6],

[6, 1.4, -5.9]]

x_header = data[0][1:]

y_header = [i for i in range(1, 13)]

data=data[1:]

for i in range(len(data)):

data[i] = data[i][1:]

arr = np.array(data)

fig, ax = plt.subplots()

#heatmap = plt.pcolor(arr, cmap = 'RdBu')

norm = MidpointNormalize(midpoint=0)

im = ax.imshow(data, norm=norm, cmap=plt.cm.seismic, interpolation='none')

ax.set_xticks(np.arange(arr.shape[1]), minor=False)

ax.set_yticks(np.arange(arr.shape[0]), minor=False)

ax.xaxis.tick_top()

ax.set_xticklabels(x_header, rotation=90)

ax.set_yticklabels(y_header)

fig.colorbar(im)

plt.show()

它生成图像

在此处输入图片说明

我也想在网格内显示值。有什么办法吗?

回答:

当然,只需执行以下操作:

import matplotlib.pyplot as plt

import numpy as np

data = np.random.random((4, 4))

fig, ax = plt.subplots()

# Using matshow here just because it sets the ticks up nicely. imshow is faster.

ax.matshow(data, cmap='seismic')

for (i, j), z in np.ndenumerate(data):

ax.text(j, i, '{:0.1f}'.format(z), ha='center', va='center')

plt.show()

在此处输入图片说明

但是,标签很难看到,因此您可能需要在它们周围放置一个框:

import matplotlib.pyplot as plt

import numpy as np

data = np.random.random((4, 4))

fig, ax = plt.subplots()

# Using matshow here just because it sets the ticks up nicely. imshow is faster.

ax.matshow(data, cmap='seismic')

for (i, j), z in np.ndenumerate(data):

ax.text(j, i, '{:0.1f}'.format(z), ha='center', va='center',

bbox=dict(boxstyle='round', facecolor='white', edgecolor='0.3'))

plt.show()

在此处输入图片说明

另外,在许多情况下,这样ax.annotate做更为有用ax.text。它在放置文本方面更加灵活,但也更加复杂。在这里看看示例:http

:

//matplotlib.org/users/annotations_guide.html

以上是 使用matplotlib在网格中显示值 的全部内容, 来源链接: utcz.com/qa/417996.html

回到顶部