此代码:
%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()
会得到the official result(See/verify it here)的结果:
但是,如果我禁用内联绘图并启用plt.show()
,结果将会是这样的:
即,注释消失,但如果禁用内联绘图,则一个单元格和y标签方向错误。由于这是我所做的唯一更改,我认为这是seaborn
的错误,它无法产生一致的结果。
有人可以确认吗?
请问有什么可能吗?
更新,感谢谢尔盖的反馈意见,以下是我所有相关内容的版本:
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标签,以防万一。
由于
答案 0 :(得分:3)
此错误实际上已在Seaborn GitHub页面here中报告。从那里的注释中,当matplotlib使用MacOSX
,TkAgg
或QtAgg
后端时(在IPython / Jupyter笔记本中使用%matplotlib notebook
时)会出现问题。
原则上,将后端更改为不同的后端应该使绘图按预期工作(如第一张图所示)。从matplotlib's documentation开始,您可以查看
使用的后端matplotlib.get_backend()
并使用
将其更改为其他名称matplotlib.use()
不幸的是,似乎所有可用的交互式后端出现此问题。如果这是您所需要的,您可能需要等到错误解决后(您可以在GitHub页面上跟踪该进展)。
如果您很乐意为您的情节制作PNG / PDF文件而不是交互式窗口,Agg
后端应该可以正常工作,只需对您的代码稍作修改:
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")
答案 1 :(得分:0)
对我来说,代码产生相同的结果,与我是否使用%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