我正在试验 seaborn,对指定轴属性有疑问。在我下面的代码中,我采用了两种方法来创建矩阵的热图并将结果放在图中的两组轴上。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
A=np.random.randn(4,4)
labels=['a','b','c','d']
fig, ax = plt.subplots(2)
sns.heatmap(ax =ax[0], data = A)
ax[0].set_xticks(range(len(labels)))
ax[0].set_xticklabels(labels,fontsize=10,rotation=45)
ax[0].set_yticks(range(len(labels)))
ax[0].set_yticklabels(labels,fontsize=10,rotation=45)
ax[1].set_xticks(range(len(labels)))
ax[1].set_xticklabels(labels,fontsize=10,rotation=45)
ax[1].set_yticks(range(len(labels)))
ax[1].set_yticklabels(labels,fontsize=10,rotation=45)
sns.heatmap(ax =ax[1], data = A,xticklabels=labels, yticklabels=labels)
plt.show()
结果图如下所示:
通常,我总是采用第一种方法创建热图,然后指定轴属性。然而,在创建动画(嵌入到 tkinter Canvas 上)时,这是我最终感兴趣的事情,我发现更新函数中的这种排序会导致轴标签“闪烁”。第二种方法将消除这种影响,并且它还将刻度线沿轴放在正方形内的中心。
但是,第二种方法不会按需要旋转 y 轴刻度标签。有没有简单的解决方法?
最佳答案
我不确定这就是您要找的。看起来您在更改 yticklabels
后创建了 figure
。所以 figure
正在覆盖你的 yticklabels
。
下面将解决您的问题。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
A=np.random.randn(4,4)
labels=['a','b','c','d']
fig, ax = plt.subplots(2)
sns.heatmap(ax =ax[0], data = A)
ax[0].set_xticks(range(len(labels)))
ax[0].set_xticklabels(labels,fontsize=10,rotation=45)
ax[0].set_yticks(range(len(labels)))
ax[0].set_yticklabels(labels,fontsize=10,rotation=45)
ax[1].set_xticks(range(len(labels)))
ax[1].set_xticklabels(labels,fontsize=10,rotation=45)
ax[1].set_yticks(range(len(labels)))
sns.heatmap(ax =ax[1], data = A,xticklabels=labels, yticklabels=labels)
ax[1].set_yticklabels(labels,fontsize=10,rotation=45)
plt.show()
关于python - 如果我在制作绘图之前设置轴属性,如何旋转轴刻度标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70088890/