matplotlib imshow 的粗偏移问题

thick offset problem with matplotlib imshow

我正在尝试使用 matplotlib imshow 绘制相关矩阵。

几乎成功了,但我的勾号偏移了,第一个不见了!?

这是我的代码:

fig1, ax = plt.subplots(1,1)
heatplot = ax.imshow(X.corr(), cmap='jet')
ax.set_xticklabels(X.columns)
ax.set_yticklabels(X.columns)
tick_spacing = 1
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))

结果:Tmin 应该结束 Tmax 但现在在最后一行没有勾选

调用 ax.xaxis.set_major_locator(ticker.MultipleLocator(1)) 没有指定起始刻度位置。显然,这里 matplotlib 还在 -1 位置设置了一个刻度。此外,在调用 set_xticklabels.

之前应固定刻度位置

最简单的方法是调用 ax.set_xticks(range(len(X.columns))) 来指定所需的确切报价。

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

fig1, ax = plt.subplots(1, 1)
X = pd.DataFrame(np.random.rand(4, 10), columns=[*'abcdefghij'])
heatplot = ax.imshow(X.corr(), cmap='seismic_r', vmin=-1, vmax=1)
ax.set_xticks(range(len(X.columns)))
ax.set_yticks(range(len(X.columns)))
ax.set_xticklabels(X.columns, rotation=90)
ax.set_yticklabels(X.columns)
plt.show()

seaborn 提供了一个更简单的界面,它会自动执行许多操作:

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

X = pd.DataFrame(np.random.rand(4, 12), columns=['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'])
sns.heatmap(data=X.corr(), cmap='RdYlGn', vmin=-1, vmax=1, annot=True)
plt.xticks(rotation=30)
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()