当使用seaborn(以及使用matplotlib的相关矩阵)绘制热图时,第一行和最后一行被切成两半。 当我运行这个在网上找到的最小代码示例时,也会发生这种情况。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv('https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv')
plt.figure(figsize=(10,5))
sns.heatmap(data.corr())
plt.show()
y轴上的标签在正确的位置,但行并不完全在此处。
几天前,它按预期工作。从那时起,我安装了texlive-xetex,因此我再次将其删除,但是并不能解决我的问题。
有什么想法我可能会错过吗?
答案 0 :(得分:39)
它是3.1.0和3.1.1之间的matplotlib回归中的错误 您可以通过以下方式纠正此问题:
import seaborn as sns
df_corr = someDataFrame.corr()
ax = sns.heatmap(df_corr, annot=True) #notation: "annot" not "annote"
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
答案 1 :(得分:14)
使用上述方法修复并手动设置热图限制。
第一
ax = sns.heatmap(...
用
检查当前轴ax.get_ylim()
(5.5, 0.5)
已修复
ax.set_ylim(6.0, 0)
答案 2 :(得分:5)
我通过在代码中用matplotlib==3.1.1
添加这一行来解决了这个问题:
ax.set_ylim(sorted(ax.get_xlim(), reverse=True))
NB。起作用的唯一原因是因为x轴未更改,因此在将来的mpl版本中使用后果自负
答案 3 :(得分:3)
不幸的是, matplotlib 3.1.1 broke seaborn heatmaps ;以及通常带有固定刻度的倒转轴。
在当前的开发版本中已修复此问题。您可能因此
答案 4 :(得分:3)
matplotlib 3.1.2已发布- 它可以通过conda-forge在Anaconda云中使用,但是我无法通过conda install进行安装。 手动替代方法有效: 从github下载matplotlib 3.1.2并通过pip安装
% curl https://codeload.github.com/matplotlib/matplotlib/tar.gz/v3.1.2 --output matplotlib-3.1.2.tar.gz
% pip install matplotlib-3.1.2.tar.gz
答案 5 :(得分:0)
答案 6 :(得分:0)
rustyDev关于conda-forge是正确的,但是我不需要从github下载进行手动pip安装。对我来说,在Windows上,它可以直接工作。而且情节都很好。
conda install -c conda-forge matplotlib
可选点,答案不需要:
然后,我尝试了其他步骤,但没有必要:在conda提示符下:conda search matplotlib --info未显示新版本信息,最新信息为3.1.1。因此,我尝试使用pip install matplotlib==3.1.2
点子,但是点子说“要求已经满足”
然后根据medium.com/@rakshithvasudev/…获取版本。python - import matplotlib - matplotlib.__version__
显示3.1.2已成功安装
顺便说一句,将Spyder更新到v4.0.0之后,我直接遇到了此错误。误差在混淆矩阵图中。几个月前已经提到过这一点。 stackoverflow.com/questions/57225685/…已经与这个棘手的问题相关联。
答案 7 :(得分:0)
为我工作:
b, t = plt.ylim()
b += 0.5
t -= 0.5
custom_ylim = (b, t)
plt.setp(axes, ylim=custom_ylim)
答案 8 :(得分:0)
降级您的matplotlib
!pip install matplotlib==3.1.0
并将此行添加到您的绘图代码中:
ax[i].set_ylim(sorted(ax[i].get_xlim(), reverse=True))
答案 9 :(得分:-1)
conda安装matplotlib = 3.1.0
这对我有用,并将matplotlib从3.1.1降级到3.1.0,并且热图开始正确运行
答案 10 :(得分:-1)
正如@ImportanceOfBeingErnest 所提到的,这个问题是由于特定版本的 matplotlib 中的 seaborn heatmaps 损坏造成的,所以这个问题的简单解决方案是升级 matplotlib,如下所示:
pip install --upgrade matplotlib
答案 11 :(得分:-2)