向pcolor heatmap添加文本ticklabels

时间:2015-10-06 22:08:27

标签: python matplotlib plot heatmap labels

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:]

1 个答案:

答案 0 :(得分:5)

来自the answer you linked的代码效果很好。看起来你改变了一些意味着它没有用的东西。

您遇到的主要问题是您尝试将set_xticklabelsset_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_xticksset_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()

enter image description here