调用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()