Python 海生虫子?热图绘制不一致
此代码:Python 海生虫子?热图绘制不一致,python,python-3.x,ipython-notebook,heatmap,seaborn,Python,Python 3.x,Ipython Notebook,Heatmap,Seaborn,此代码: %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, ann
%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的一个bug,它不能产生一致的结果
有人能确认一下吗?请问有什么可能的解决办法吗 更新,感谢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
import sys
print 'Python: ' + sys.version
import IPython
print 'IPython: ' + IPython.__version__
import matplotlib
print 'Matplotlib: ' + matplotlib.__version__
import seaborn
print 'Seaborn: ' + seaborn.__version__
所以我认为是Python3或Matplotlib:1.5导致了这个问题。我将添加Python3标记,以防万一
感谢对于我来说,无论我是否使用
%matplotlib inline
,代码都会产生相同的结果,并使其plt.show()
,未观察到任何错误
检查所有相关内容的版本:
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
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
这个bug实际上已经在Seaborn GitHub页面上报告过。从那里的评论中可以看出,matplotlib在使用
MacOSX
、TkAgg
或QtAgg
后端时出现问题(在IPython/Jupyter笔记本中使用%matplotlib笔记本时也是如此)
原则上,将后端更改为其他后端应使绘图按预期工作(如第一幅图所示)。从中,您可以检查正在使用的后端
matplotlib.get_backend()
并将其更改为另一个带有
matplotlib.use()
不幸的是,所有可用的交互式后端似乎都出现了这个问题。如果这正是您所需要的,那么您可能需要等到bug被解决之后(您可以在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")
谢谢你,巴勃罗。我正在使用Windows7,我的交互式后端是QtAgg
。不幸的是,正如kyleabeauchamp所报道的,“TkAgg和QT4Agg与OSX具有相同的单细胞行为。”也就是说,我也不走运。@xpt是的,你是对的,MacOSX
不是产生此错误的唯一后端。我还为Linux上的QtAgg
和TkAgg
确认了它。如果您对保存为PNG/PDF感到满意,那么Agg
后端确实适合我。不幸的是,我不知道您还可以使用其他交互式后端,我们可能要等到seaborn/matplotlib错误解决后才能使用。我会用这些信息更新我的答案。是的,这很有效。谢谢,因为use(“Agg”)
没有文档,我也找不到。当seaborn/matplotlib错误解决后,我将+1这个和+1&接受下一个,然后您更新您的答案。