注释matplotlib热图

2024-04-29 03:45:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在已经存在的图像上的Matplotlib上创建了一个简单的热图,现在我试图显示单元格上的值,但问题是这些值不会进入热图,而是在图像周围,here是一个屏幕截图

我想这是因为我在一张图片上生成了热图,但我不知道如何解决这个问题。这是我的密码:

fig,ax = plt.subplots(1)

ax.imshow(im)

a = [[0.0233188  0.0232844  0.0233099  0.0242786 ]
     [0.0233158  0.023217   0.02370096 0.02434176]
     [0.02328474 0.02319508 0.02433976 0.02290478]
     [0.02320107 0.02345002 0.02484117 0.02355316]
     [0.02317872 0.02374418 0.02374605 0.02157998]]

ax1 = fig.add_subplot(111)

bounds1 = sorted([0.023,  np.amin(a), np.amax(a)])
norm1 = matplotlib.colors.TwoSlopeNorm(vcenter=bounds1[1], vmin=bounds1[0], vmax=bounds1[2])

Map = ax1.imshow(a, interpolation='none', norm=norm1, extent=[0, 1.15, 0, 0.85])

x1 = [1, 2, 3, 4]
y1 = [1, 2, 3, 4, 5]

for i in range(len(y1)):
    for j in range(len(x1)):
        text = ax1.text(j, i, a[i, j],
                       ha="center", va="center", color="r")

Tags: in图像forlennpfigrangeax
1条回答
网友
1楼 · 发布于 2024-04-29 03:45:01

extent=[x0, x1, y0, y1]更改图像的x和y坐标。当x0和x1之间有N个单元时,可以通过将距离分成2N+1部分并取第一个,第三个第三个,第五个第三个。。。该名单的位置

请注意,由于imshow(a, ...)没有使用origin='lower',因此值是相反的。因此,对于y位置,需要以相反的顺序进行遍历

from matplotlib import pyplot as plt
import matplotlib
import numpy as np

fig, ax = plt.subplots()
ax.axis('off')

a = np.array([[0.0233188, 0.0232844, 0.0233099, 0.0242786],
              [0.0233158, 0.023217, 0.02370096, 0.02434176],
              [0.02328474, 0.02319508, 0.02433976, 0.02290478],
              [0.02320107, 0.02345002, 0.02484117, 0.02355316],
              [0.02317872, 0.02374418, 0.02374605, 0.02157998]])
ax1 = fig.add_subplot(111)

bounds1 = sorted([0.023, np.amin(a), np.amax(a)])
norm1 = matplotlib.colors.TwoSlopeNorm(vcenter=bounds1[1], vmin=bounds1[0], vmax=bounds1[2])

x0, x1, y0, y1 = 0, 1.15, 0, 0.85
Map = ax1.imshow(a, interpolation='none', norm=norm1, extent=[x0, x1, y0, y1])

for i, yi in enumerate(np.linspace(y0, y1, 2 * a.shape[0] + 1)[-2::-2]):
    for j, xj in enumerate(np.linspace(x0, x1, 2 * a.shape[1] + 1)[1::2]):
        text = ax1.text(xj, yi, f'{a[i, j]:.6f}',
                        ha="center", va="center", color='darkred' if a[i, j] > bounds1[1] else 'white', fontsize=10)
plt.show()

resulting plot

相关问题 更多 >