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使用MacOSX
, TkAgg
或QtAgg
后端时(当在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