Skip to main content
 首页 » 编程设计

python之将文本标记标签添加到 pcolor 热图

2025年05月04日30webabcd

DF_correlation = [[ 1.          0.98681158  0.82755361  0.92526117  0.89791366  0.9030177 
   0.89770557  0.55671958] 
 [ 0.98681158  1.          0.83368369  0.9254521   0.89316248  0.89972443 
   0.90532978  0.57465985] 
 [ 0.82755361  0.83368369  1.          0.81922077  0.77497229  0.7983193 
   0.81733801  0.55746732] 
 [ 0.92526117  0.9254521   0.81922077  1.          0.96940546  0.96637508 
   0.95535544  0.54038968] 
 [ 0.89791366  0.89316248  0.77497229  0.96940546  1.          0.93196132 
   0.88261706  0.42088366] 
 [ 0.9030177   0.89972443  0.7983193   0.96637508  0.93196132  1. 
   0.90765632  0.50381925] 
 [ 0.89770557  0.90532978  0.81733801  0.95535544  0.88261706  0.90765632 
   1.          0.62757404] 
 [ 0.55671958  0.57465985  0.55746732  0.54038968  0.42088366  0.50381925 
   0.62757404  1.        ]] 

我正在关注 https://www.geekbooks.me/book/view/machine-learning-in-python制作回归热图。

import pandas as pd 
from pandas import DataFrame 
import matplotlib.pyplot as plt 
 
headers = ["sex", "length","diameter", "height", "whole_weight", "shucked_weight","viscera_weight","shell_weight","rings"] 

Michael Bowles 代码如下:

plt.pcolor(DF_correlation) 
plt.show() 

这工作正常,但没有标签,所以我尝试添加标签,如 matplotlib: colorbars and its text labels

我稍微改变了格式,但还是不行:

fig, ax = plt.subplots() 
heatmap = ax.pcolor(DF_correlation) 
cbar = plt.colorbar(heatmap) 
ax.set_xticklabels = ax.set_yticklabels = headers[1:] 
plt.show() 

如何将标签添加到该图中?这是一个相关图,所以 x 和 y 标签将是相同的...基本上 headers[1:]

请您参考如下方法:

来自 the answer you linked 的代码, 效果很好。看起来您更改了一些内容,这意味着它不起作用。

您遇到的主要问题是您正在尝试将 set_xticklabels 和 set_yticklabels 设置为此处的列表

ax.set_xticklabels = ax.set_yticklabels = headers[1:] 

但是,它们是 Axes 对象 (ax) 的方法,因此您必须调用它们,以 headers 列表作为争论。

ax.set_xticklabels(headers[1:]) 
ax.set_yticklabels(headers[1:]) 

以下是脚本中采用的链接答案中的方法。我还旋转了 xticklabels 以阻止它们重叠 (rotation=90),并将它们移动到单元格的中心(参见 set_xticks 和set_yticks 下面几行)

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
 
# Make DF_correlation into a DataFrame 
DF_correlation = pd.DataFrame([ 
 [ 1.        ,  0.98681158,  0.82755361,  0.92526117,  0.89791366,  0.9030177 ,  0.89770557,  0.55671958], 
 [ 0.98681158,  1.        ,  0.83368369,  0.9254521 ,  0.89316248,  0.89972443,  0.90532978,  0.57465985], 
 [ 0.82755361,  0.83368369,  1.        ,  0.81922077,  0.77497229,  0.7983193 ,  0.81733801,  0.55746732], 
 [ 0.92526117,  0.9254521 ,  0.81922077,  1.        ,  0.96940546,  0.96637508,  0.95535544,  0.54038968], 
 [ 0.89791366,  0.89316248,  0.77497229,  0.96940546,  1.        ,  0.93196132,  0.88261706,  0.42088366], 
 [ 0.9030177 ,  0.89972443,  0.7983193 ,  0.96637508,  0.93196132,  1.        ,  0.90765632,  0.50381925], 
 [ 0.89770557,  0.90532978,  0.81733801,  0.95535544,  0.88261706,  0.90765632,  1.        ,  0.62757404], 
 [ 0.55671958,  0.57465985,  0.55746732,  0.54038968,  0.42088366,  0.50381925,  0.62757404,  1.        ] 
 ]) 
 
headers = ["sex", "length","diameter", "height", "whole_weight", "shucked_weight","viscera_weight","shell_weight","rings"] 
 
fig, ax = plt.subplots() 
fig.subplots_adjust(bottom=0.25,left=0.25) # make room for labels 
 
heatmap = ax.pcolor(DF_correlation) 
cbar = plt.colorbar(heatmap) 
 
# Set ticks in center of cells 
ax.set_xticks(np.arange(DF_correlation.shape[1]) + 0.5, minor=False) 
ax.set_yticks(np.arange(DF_correlation.shape[0]) + 0.5, minor=False) 
 
# Rotate the xlabels. Set both x and y labels to headers[1:] 
ax.set_xticklabels(headers[1:],rotation=90) 
ax.set_yticklabels(headers[1:]) 
 
plt.show()