2015-10-13 15 views
14

Seaborn cung cấp một số đồ họa rất thú vị cho việc trình bày dữ liệu khoa học. Vì vậy, tôi bắt đầu sử dụng đồ họa Seaborn này xen kẽ với các ô matplotlib tùy chỉnh khác. Vấn đề là khi tôi làm:Ẩn cấu hình Seaborn mặc định matplotlib

import seaborn as sb 

nhập này dường như để thiết lập các thông số đồ họa cho sanh ở biển toàn cầu và sau đó tất cả các đồ họa matplotlib dưới nhập khẩu được các thông số sanh ở biển (họ có được một nền màu xám, những thay đổi linewithd, vv , v.v.)

Trong SO có an answer giải thích cách tạo ra các lô biển với cấu hình matplotlib, nhưng điều tôi muốn là giữ cho thông số cấu hình matplotlib không thay đổi khi sử dụng cả hai thư viện và cùng lúc có thể sản xuất, khi cần các lô biển.

+3

có thể trùng lặp của [Làm thế nào tôi có thể sử dụng sanh ở biển mà không thay đổi giá trị mặc định matplotlib?] (Http://stackoverflow.com/questions/25393936/how-can -i-use-seaborn-without-changing-the-matplotlib-defaults) – mwaskom

+0

Tài liệu seaborn khá tốt. Điều này được đề cập gần đầu tài liệu cài đặt: http://stanford.edu/~mwaskom/software/seaborn/installing.html?highlight=apionly#importing-seaborn –

+1

Tôi không chắc chắn đây là bản sao chính xác của tài liệu đó câu hỏi: nó cũng giải quyết sự cần thiết phải chuyển đổi giữa seaborn và matplotlib mặc định động trong một kịch bản, mà không được đề cập trong bản sao được đề xuất – tom

Trả lời

16

Nếu bạn không bao giờ muốn sử dụng seaborn phong cách, nhưng làm muốn một số chức năng sanh ở biển, bạn có thể nhập sanh ở biển sử dụng dòng này sau (documentation):

import seaborn.apionly as sns 

Nếu bạn muốn tạo ra một số lô với kiểu seaborn và một số không có, trong cùng một tập lệnh, bạn có thể tắt kiểu seaborn bằng chức năng seaborn.reset_orig.

Dường như việc nhập apionly về cơ bản sẽ tự động đặt reset_orig khi nhập, do đó tùy thuộc vào bạn hữu ích nhất trong trường hợp sử dụng của bạn.

Dưới đây là một ví dụ về chuyển đổi giữa matplotlib giá trị mặc định và seaborn:

import matplotlib.pyplot as plt 
import matplotlib 
import numpy as np 

# a simple plot function we can reuse (taken from the seaborn tutorial) 
def sinplot(flip=1): 
    x = np.linspace(0, 14, 100) 
    for i in range(1, 7): 
     plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip) 

sinplot() 

# this will have the matplotlib defaults 
plt.savefig('seaborn-off.png') 
plt.clf() 

# now import seaborn 
import seaborn as sns 

sinplot() 

# this will have the seaborn style 
plt.savefig('seaborn-on.png') 
plt.clf() 

# reset rc params to defaults 
sns.reset_orig() 

sinplot() 

# this should look the same as the first plot (seaborn-off.png) 
plt.savefig('seaborn-offagain.png') 

trong đó sản xuất ba lô sau:

seaborn-off.png: seaborn-off

seaborn-on.png: seaborn-on

seaborn-offagain.png: enter image description here

+0

Cảm ơn, reset_orig() là một cách tiếp cận tốt nhưng vẫn không sản xuất chính xác hình gốc trong trường hợp của tôi . Tôi đã tạo ra và lưu một hình matplolib (hai ô liên tiếp (xi, yi, '.') 'Trong đó xi và yi là danh sách của hàng trăm phần tử) từ hai sổ tay ipython khác nhau, một sử dụng matplotlib thẳng và một âm mưu khác đặt lại điều kiện matplotlib ban đầu. Màu sắc của các dấu chấm trong hình sau sinh đầu tiên là đáng chú ý ít dữ dội hơn \ tương phản hơn trong một với cấu hình matplotlib không thay đổi (giống như nếu chúng có độ trong suốt). – joaquin

+2

Có lẽ tốt nhất là nên chia sẻ một số mã để người khác có thể tái tạo vấn đề đó? – tom

0

Như đã giải thích in this other question bạn có thể nhập sanh ở biển với:

import seaborn.apionly as sns 

Và phong cách matplotlib sẽ không được sửa đổi.

1

Bạn có thể sử dụng chức năng matplotlib.style.context như được mô tả trong style guide.

#%matplotlib inline #if used in jupyter notebook 
import matplotlib.pyplot as plt 
import seaborn as sns 

# 1st plot 
with plt.style.context("seaborn-dark"): 
    fig, ax = plt.subplots() 
    ax.plot([1,2,3], label="First plot (seaborn-dark)") 

# 2nd plot 
with plt.style.context("default"): 
    fig, ax = plt.subplots() 
    ax.plot([3,2,1], label="Second plot (matplotlib default)") 

# 3rd plot 
with plt.style.context("seaborn-darkgrid"): 
    fig, ax = plt.subplots() 
    ax.plot([2,3,1], label="Third plot (seaborn-darkgrid)") 

enter image description here

0

Khôi phục tất cả params RC để cài đặt gốc (tôn trọng rc tùy chỉnh) được cho phép bởi seaborn.reset_orig() chức năng

3

Tính đến sanh ở biển phiên bản 0.8 (tháng 7 2017) đồ thị phong cách không bị thay đổi nữa trên nhập. OP mong muốn bây giờ là hành vi mặc định.Từ https://seaborn.pydata.org/whatsnew.html:

Kiểu mặc định (seaborn) không còn được áp dụng khi seaborn được nhập. Bây giờ bạn cần gọi rõ ràng set() hoặc một hoặc nhiều của set_style(), set_context() và set_palette(). Tương ứng, mô-đun seaborn.apionly không được chấp nhận.

Bạn có thể chọn kiểu ô bất kỳ bằng plt.style.use().

import matplotlib.pyplot as plt 
import seaborn as sns 

plt.style.use('seaborn')#switch to seaborn style 
#plot code 

plt.style.use('default')#switches back to matplotlib style 
#plot code 

#To see all available styles 
print(plt.style.available) 

Thông tin thêm về plt.style() here

+0

Tôi phải làm 'plt.style.use ('classic')' để lấy kiểu matplotlib mặc định. –

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