gpt4 book ai didi

python - 在 matplotlib pcolor 图上设置正确对齐的轴标签

转载 作者:行者123 更新时间:2023-11-28 22:39:17 25 4
gpt4 key购买 nike

我有一个简单的 matplotlib pcolor 图,可以使用以下 MWE 重现:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

test_data = np.array([[-0.00842278, -0.03332517, -0.01478557, -0.00275494],
[ 0.16338327, 0.08383871, 0.03093892, 0.03380778],
[-0.02246485, -0.1490697 , -0.14918824, -0.12745594],
[ 0.02477743, 0.1537171 , 0.13111042, 0.11950057],
[-0.15408288, -0.04697411, -0.0068787 , -0.01576426],
[ 0.03508095, 0.19434805, 0.13647802, 0.11276903],
[-0.16683297, 0.05313956, 0.0283734 , 0.01179509],
[-0.08839198, -0.02095752, -0.00573671, 0.00360559],
[ 0.15476156, -0.06324123, -0.04798161, -0.03844384],
[-0.056892 , -0.09804484, -0.09506561, -0.08506755],
[ 0.2318552 , -0.02209629, -0.04530164, -0.02950514],
[-0.11914883, 0.00965362, -0.02431899, -0.0203009 ],
[ 0.16025558, 0.02234824, -0.01480751, -0.01487853],
[ 0.17345419, -0.04348332, -0.07625766, -0.05771962]])

test_df = pd.DataFrame(1 - abs(test_data))
test_df.columns = ['3', '6', '9', '12']
test_df.index = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15', '20', '25', '30']
plt.pcolor(test_df, cmap=plt.cm.RdYlGn, vmin=0, vmax=1)
plt.show()

产生这个:

plot without aligned axis labels

从上面可以看出,轴标签不正确,也没有与图中的彩色矩形正确对齐。

我可以使用以下代码在 x 轴上创建预期的轴标签:

ax = plt.gca()
labels = [u'', u'3', u'', u'6', u'', u'9', u'', u'12', u'']
ax.set_xticklabels(labels)

产生这个:

second plot corrected x axis

我的问题是我无法在 y 轴上重现它,因为标签与矩形的中心不一致。

有没有办法使 x 和 y 轴标签正确,如数据框标题和索引中所述?同时确保标签位于矩形的中心,而不是边缘。

最佳答案

这样做不是很好(您正在将刻度标签与数据解耦),但您可以这样做:

fig,ax = plt.subplots()

ax.pcolor(test_df, cmap=plt.cm.RdYlGn, vmin=0, vmax=1)

ax.set_yticks(np.arange(len(test_df.index))+0.5)
ax.set_yticklabels(test_df.index)

ax.set_xticks(np.arange(len(test_df.columns))+0.5)
ax.set_xticklabels(test_df.columns)

我们将刻度设置为每个 0.5、1.5、2.5(使它们居中)等,然后根据您的 dataframe 索引和列设置刻度标签.

enter image description here

关于python - 在 matplotlib pcolor 图上设置正确对齐的轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928370/

25 4 0