python - 如何在热图中将刻度和标签居中

标签 python matplotlib label data-visualization heatmap

我正在使用 matplotlib 绘制热图,如下图所示:

matplotlib heatmap

该图是通过以下代码构建的:

C_range = 10. ** np.arange(-2, 8)
gamma_range = 10. ** np.arange(-5, 4)

confMat=np.random.rand(10, 9)

heatmap = plt.pcolor(confMat)

for y in range(confMat.shape[0]):
    for x in range(confMat.shape[1]):
        plt.text(x + 0.5, y + 0.5, '%.2f' % confMat[y, x],
                horizontalalignment='center',
                verticalalignment='center',)


plt.grid()
plt.colorbar(heatmap)
plt.subplots_adjust(left=0.15, right=0.99, bottom=0.15, top=0.99)
plt.ylabel('Cost')
plt.xlabel('Gamma')

plt.xticks(np.arange(len(gamma_range)), gamma_range, rotation=45,)
plt.yticks(np.arange(len(C_range)), C_range, rotation=45)
plt.show()

我需要将两个轴上的刻度和标签居中。有任何想法吗?

最佳答案

对于您的特定代码,最简单的解决方案是将您的刻度位置移动半个单位间隔:

import numpy as np
import matplotlib.pyplot as plt

C_range = 10. ** np.arange(-2, 8)
gamma_range = 10. ** np.arange(-5, 4)

confMat=np.random.rand(10, 9)

heatmap = plt.pcolor(confMat)

for y in range(confMat.shape[0]):
    for x in range(confMat.shape[1]):
        plt.text(x + 0.5, y + 0.5, '%.2f' % confMat[y, x],
                horizontalalignment='center',
                verticalalignment='center',)


#plt.grid() #this will look bad now
plt.colorbar(heatmap)
plt.subplots_adjust(left=0.15, right=0.99, bottom=0.15, top=0.99)
plt.ylabel('Cost')
plt.xlabel('Gamma')

plt.xticks(np.arange(len(gamma_range))+0.5, gamma_range, rotation=45,)
plt.yticks(np.arange(len(C_range))+0.5, C_range, rotation=45)
plt.show()

result

如您所见,在这种情况下,您需要关闭网格,否则它会与您的正方形重叠并弄乱您的绘图。

关于python - 如何在热图中将刻度和标签居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772708/

相关文章:

python - 如何将这个简单的 Photoshop 工作流程转换为 PIL

python - PyQt 和 PyCairo

android - 更改 Android 应用程序中的区域设置不会更改 Activity 标签

wpf - 更改标签字符串中单个字母的颜色?

python - 尝试升级 pip,但出现错误 'WinError 5'

python - XSL转换,请求子节点数据

python - 提取矩阵的可变列数

python - 在绘图中显示 Y 轴网格线

python - matplotlib - 将一天中的每一分钟绘制为 x 轴

java - 线之间的超链接