2015-12-19 2 views
7

Этот код:Морская ошибка? Непоследовательность в Тепловой карте черчения

%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):

enter image description here

Однако, если я отключить встроенный заговоры и включить plt.show() результат будет выглядеть следующим образом:

Annotated heatmaps?

I.e., аннотация отсутствует, за исключением того, что одна ячейка и ориентация ярлыка y неправильны, если встроенный график отключен. Поскольку это единственное изменение, которое я сделал, я думаю, что это ошибка с seaborn, что она не может обеспечить согласованные результаты.

Можно ли подтвердить это, пожалуйста?
И есть ли какие-либо возможные исправления, пожалуйста?

Update, благодаря Сергею за его обратной связи, вот мои версии все актуальны:

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

Для меня код дает тот же результат, независимо от того, используется ли я %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 
3

Эта ошибка была фактически сообщается на странице Seaborn GitHub here. Из комментариев там проблема возникает, когда matplotlib использует серверы MacOSX, TkAgg или QtAgg (также при использовании %matplotlib notebook в ноутбуке IPython/Jupyter).

В принципе, изменение бэкэнда на другое должно заставить график работать как ожидалось (как показано на первом рисунке). Из matplotlib's documentation, вы можете проверить, что Backend вы используете с

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") 
+0

спасибо Пабло. Я использую Windows7, а мой интерактивный бэкэнд - 'QtAgg'. К сожалению, как сообщает kyleabeauchamp, «TkAgg и QT4Agg имеют одно и то же поведение в одной ячейке, что и OSX». Мне тоже не повезло. – xpt

+1

@ xpt Да, вы правы, что «MacOSX» - не единственный бэкэнд, который производит эту ошибку. Я также подтвердил это для 'QtAgg' и' TkAgg' в Linux. Если вы довольны тем, что просто сохраняете PNG/PDF, бэкэнд Agg работает для меня. К сожалению, я не знаю других интерактивных бэкэндов, которые вы могли бы использовать, нам, вероятно, придется подождать, пока ошибка морского судна/matplotlib не будет решена. Я обновляю свой ответ с помощью этой информации. –

+0

Да, это работает. ** Спасибо **, потому что этот 'use (" Agg ")' недокументирован, и я все равно не могу найти. Я добавлю +1 к этому и +1 и приму следующее, когда ошибка морского судна/matplotlib будет решена, и вы обновите свой ответ. – xpt

Смежные вопросы