matplotlib / seaborn:将第一行和最后一行切成热图图的一半

时间:2019-07-08 21:18:45

标签: python matplotlib seaborn

当使用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()

And get this result (I am not allowed to embed images yet) y轴上的标签在正确的位置,但行并不完全在此处。

几天前,它按预期工作。从那时起,我安装了texlive-xetex,因此我再次将其删除,但是并不能解决我的问题。

有什么想法我可能会错过吗?

12 个答案:

答案 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 ;以及通常带有固定刻度的倒转轴。
在当前的开发版本中已修复此问题。您可能因此

  • 还原为matplotlib 3.1.0
  • 等待matplotlib 3.1.2
  • 手动设置热图限制

答案 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)

它发生在importanceofbeingernest所建议的matplotlib版本3.1.1中

以下解决了我的问题

pip install matplotlib==3.1.0

答案 6 :(得分:0)

rustyDev关于conda-forge是正确的,但是我不需要从github下载进行手动pip安装。对我来说,在Windows上,它可以直接工作。而且情节都很好。

ARMv7-M reference manual

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)

我用以下代码解决了这个问题:

enter image description here