将文本ticklabels添加到pcolor热图

2024-10-01 15:46:00 发布

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

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制作回归的热图。在

^{pr2}$

迈克尔·鲍尔斯代码如下:

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


Tags: httpsdfwwwshowplt标签axheaders
1条回答
网友
1楼 · 发布于 2024-10-01 15:46:00

来自the answer you linked的代码运行良好。看起来你改变了一些东西,这意味着它不起作用。在

您的主要问题是您试图将set_xticklabels和{}设置为列表

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

但是,它们是Axes对象(ax)的方法,因此必须调用它们,并使用headers列表作为参数。在

^{pr2}$

以下是脚本中使用的链接答案的方法。我还旋转了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

相关问题 更多 >

    热门问题