Seaborn的bug? 在热图绘图中不一致

此代码:

%matplotlib inline

#import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import seaborn as sns #; sns.set()

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

sns.heatmap(flights, annot=True, linewidths=.2, fmt="d")

#plt.show()

将得到一个看起来像官方结果的结果(请参阅/在此验证):

在这里输入图像描述

但是,如果禁用内联绘图并启用plt.show()则结果将如下所示:

注释的热图?

也就是说, 除了一个单元格和y标签方向是错误的,如果内联绘图被禁用注释已经消失 。 由于这是我做出的唯一改变,我认为这是一个seaborn的错误,它不能产生一致的结果。

任何人都可以确认这个吗?
请问有什么可能的解决办法吗?

更新谢谢Sergey的反馈,以下是我所有相关的版本:

Python: 3.5.0 |Anaconda 2.4.0 (64-bit)| (default, Dec  1 2015, 11:46:22) [MSC v.1900 64 bit (AMD64)]
IPython: 4.0.0
Matplotlib: 1.5.0
Seaborn: 0.6.0

所以我认为它是Python3或Matplotlib:1.5导致的问题。 以防万一,我将添加Python3标记。

谢谢


这个bug实际上已经在这里的Seaborn GitHub页面中报告过了。 从那里的评论,当matplotlib使用MacOSXTkAggQtAgg后端时(当在IPython / Jupyter笔记本中使用%matplotlib notebook时)也会出现问题。

原则上,将后端更改为不同的应该使情节按预期工作(如第一张图所示)。 从matplotlib的文档,你可以检查你使用的后端

matplotlib.get_backend()

并改变它与另一个

matplotlib.use()

不幸的是,似乎这个问题出现在所有可用的交互式后端中。 如果这是你所需要的,那么你可能要等到bug解决后才能解决(你可以在GitHub页面上跟踪任何进展)。

如果您很高兴为您的绘图生成PNG / PDF文件而不是交互式窗口,那么Agg backend应该在对代码进行轻微更改后正常工作:

import matplotlib
matplotlib.use("Agg")

import matplotlib.pyplot as plt
import seaborn as sns #; sns.set()

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

sns.heatmap(flights, annot=True, linewidths=.2, fmt="d")

plt.savefig("heatmap.png")

对于我来说,代码生成的结果与是否使用%matplotlib inline并将其设置为plt.show() ,但没有观察到错误。

检查你的相关版本:

import sys
print 'Python: ' + sys.version

import IPython
print 'IPython: ' + IPython.__version__

import matplotlib
print 'Matplotlib: ' + matplotlib.__version__

import seaborn
print 'Seaborn: ' + seaborn.__version__

我的版本供参考:

Python: 2.7.10 |Anaconda 2.4.0 (64-bit)| (default, Oct 21 2015, 19:35:23) [MSC v.1500 64 bit (AMD64)]
IPython: 4.0.0
Matplotlib: 1.4.3
Seaborn: 0.6.0
链接地址: http://www.djcxy.com/p/31269.html

上一篇: Seaborn bug? Inconsistent in heatmap plotting

下一篇: Margins in Visual Basic Editor Excel 2016