2015-12-19 20 views
7

Mã này:Lỗi Seaborn? Mâu thuẫn trong Heatmap âm mưu

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

sẽ nhận được một kết quả trông giống như the official result (See/verify it here):

enter image description here

Tuy nhiên, nếu tôi vô hiệu hóa các âm mưu nội tuyến và cho phép các plt.show() kết quả sẽ trông như thế này:

Annotated heatmaps?

I.e., chú thích đã biến mất, ngoại trừ một hướng di động và nhãn y là sai nếu vẽ nội tuyến bị tắt. Vì đó là thay đổi duy nhất tôi thực hiện, tôi nghĩ rằng đây là lỗi với seaborn, rằng nó không thể tạo ra kết quả nhất quán.

Có ai có thể xác nhận điều này không?
Và bạn có thể sửa chữa được không?

Update, nhờ Sergey cho phản hồi của mình, đây là phiên bản của tôi về tất cả mọi thứ có liên quan:

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 

Vì vậy, tôi nghĩ rằng đó là một trong hai Python3, hoặc Matplotlib: 1.5 đó gây ra vấn đề. Tôi sẽ thêm thẻ Python3, chỉ trong trường hợp.

Cảm ơn

Trả lời

0

Với tôi mã sản xuất cùng một kết quả không phụ thuộc vào việc tôi sử dụng và làm cho nó %matplotlib inlineplt.show(), không có lỗi quan sát.

Kiểm tra phiên bản của bạn của tất cả mọi thứ có liên quan:

import sys 
print 'Python: ' + sys.version 

import IPython 
print 'IPython: ' + IPython.__version__ 

import matplotlib 
print 'Matplotlib: ' + matplotlib.__version__ 

import seaborn 
print 'Seaborn: ' + seaborn.__version__ 

phiên bản của tôi để tham khảo:

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

Lỗi này đã thực sự được báo cáo trong sanh ở biển GitHub trang here. Từ các ý kiến ​​ở đó, vấn đề xuất hiện khi matplotlib đang sử dụng các phụ trợ MacOSX, TkAgg hoặc QtAgg (cũng khi sử dụng %matplotlib notebook trong sổ ghi chép IPython/Jupyter).

Về nguyên tắc, việc thay đổi chương trình phụ trợ sang một phần khác sẽ làm cho cốt truyện hoạt động như mong đợi (như được hiển thị trong hình đầu tiên của bạn). Từ matplotlib's documentation, bạn có thể kiểm tra những gì backend bạn đang sử dụng với

matplotlib.get_backend() 

và thay đổi nó sang một khác nhau với

matplotlib.use() 

Thật không may, có vẻ như vấn đề này xuất hiện với tất cả các phần phụ trợ tương tác có sẵn. Nếu đó là những gì bạn cần, có thể bạn sẽ phải chờ cho đến khi lỗi được giải quyết (bạn có thể theo dõi bất kỳ tiến bộ nào trên trang GitHub).

Nếu bạn đang hạnh phúc tạo ra một tập tin PNG/PDF thay vì một cửa sổ tương tác cho âm mưu của mình, các Agg backend nên làm việc một cách chính xác với một thay đổi nhỏ để mã của bạn:

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

Cảm ơn Pablo. Tôi đang sử dụng Windows7 và phụ trợ tương tác của tôi là 'QtAgg'. Thật không may, giống như kyleabeauchamp đã báo cáo, "TkAgg và QT4Agg có cùng một hành vi như là OSX." Tức là, không may mắn cho tôi. – xpt

+1

@ xpt Có, bạn nói đúng rằng 'MacOSX' không phải là phụ trợ duy nhất tạo ra lỗi này. Tôi cũng đã xác nhận nó cho 'QtAgg' và' TkAgg' trên Linux. Nếu bạn hài lòng với việc chỉ lưu vào PNG/PDF, phần phụ trợ 'Agg' sẽ hoạt động với tôi. Thật không may, tôi không biết backend tương tác khác mà bạn có thể sử dụng, có lẽ chúng tôi sẽ phải đợi cho đến khi lỗi seaborn/matplotlib được giải quyết. Tôi sẽ cập nhật câu trả lời của tôi với thông tin này. –

+0

Vâng, nó hoạt động. ** Cảm ơn **, bởi vì 'sử dụng (" Agg ")' là không có giấy tờ và tôi không thể tìm thấy anyway. Tôi sẽ +1 +1 này và +1 & chấp nhận tiếp theo khi lỗi seaborn/matplotlib được giải quyết và bạn cập nhật câu trả lời của mình. – xpt

Các vấn đề liên quan