我正在使用matplotlib绘制相关矩阵,但是在水平刻度线的定位方面遇到了问题。
当前,我正在创建一个图形,放置矩阵图并设置轴。代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
rs = np.random.RandomState(0)
names = map(chr, range(65, 75))
df = pd.DataFrame(rs.rand(10, 10), columns=names)
correlations = df.corr()
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(correlations, vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0, 10, 1) #check
ax.set_xticks(ticks) #check
ax.set_yticks(ticks) #check
plt.show()
请注意,第一个和最后一个水平刻度线放置不正确。就像矩阵的第一行和最后一行被切成两半一样。还要注意,如果我删除了上面代码中的选中线,则结果轴将被固定,如下图所示:
因此,刻度设置有问题。关于如何解决此问题的任何提示?
@编辑
问题已被标记为重复,但是我没有找到具体解决涉及matplotlib的问题的答案。我最终使用了seaborn的heatmap
,因此可以应用所引用帖子中提供的解决方案。您只需要根据数据维度设置ylim。绘图代码如下:
fig = plt.figure()
ax = sns.heatmap(correlations, vmin=-1, vmax=1, cmap='viridis')
ax.set_ylim(10, 0)
ax.xaxis.tick_top() # placing ticks on top
ax.xaxis.set_label_position('top') # placing labels on top
ax.set_xticklabels(names) # if you want labels
ax.set_yticklabels(names, rotation='horizontal')
plt.show()