2015-10-13 19 views
14

Seaborn zawiera garść grafik, które są bardzo interesujące dla scjentystycznej reprezentacji danych. Tak więc zacząłem używać tych grafik Seaborn przeplatanych z innymi spersonalizowanymi wykresami matplotlib. Problemem jest to, że kiedyś zrobić:Konfiguracja Seaborn ukrywa domyślną matplotlib

import seaborn as sb 

Ten import wydaje się ustawić parametry graficzne dla Seaborn globalnie, a następnie wszystkie grafiki matplotlib poniżej importu uzyskać parametry Seaborn (dostają szarym tle, zmiany linewithd, etc itp.).

W SO jest an answer wyjaśniając, jak produkować seaborn działki z konfiguracją matplotlib, ale to, czego chcę, to utrzymanie niezmienionych parametrów konfiguracyjnych matplotlib przy jednoczesnym korzystaniu z obu bibliotek i jednocześnie być w stanie wyprodukować, kiedy to konieczne, oryginalny seaborn działki.

+3

Możliwy duplikat [Jak mogę używać Seaborn bez zmiany ustawień domyślnych matplotlib?] (Http://stackoverflow.com/questions/25393936/how-can -i-use-seaborn-without-changing-the-matplotlib-defaults) – mwaskom

+0

Dokumentacja seaborn jest całkiem dobra. Jest to omówione na początku dokumentacji instalacyjnej: http://stanford.edu/~mwaskom/software/seaborn/installing.html?highlight=apionly#importing-seaborn –

+1

Nie jestem pewien, czy jest to dokładny duplikat tego pytanie: wyjaśnia również potrzebę dynamicznego przełączania między domyślnymi wartościami seaborn i matplotlib w skrypcie, który nie jest objęty sugerowanym duplikatem. – tom

Odpowiedz

16

Jeśli nie chcesz używać styl seaborn, ale czy chcą niektóre funkcje Seaborn można importować Seaborn użyciu tego następujący wiersz (documentation):

import seaborn.apionly as sns 

Jeśli chcesz produkować kilka działek z W stylu tego samego skryptu można wyłączyć styl seaborn za pomocą funkcji seaborn.reset_orig.

Wygląda na to, że wykonanie importu apionly zasadniczo automatycznie ustawia reset_orig podczas importu, więc jest to najbardziej użyteczne w twoim przypadku użycia.

Oto przykład przełączania między matplotlib domyślnych i 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') 

która produkuje następujące trzy działki:

seaborn-off.png: seaborn-off

seaborn-on.png: seaborn-on

seaborn-offagain.png: enter image description here

+0

Dzięki, reset_orig() jest dobrym podejściem, ale nadal nie zapewnia dokładnie oryginalnej wartości w moim przypadku . Wyprodukowałem i uratowałem figurkę matplolib (dwa kolejne 'spisek (xi, yi, '.')' Gdzie xi i yi były listami kilkuset elementów) z dwóch różnych notebooków z ipythonem, jeden za pomocą prostego matplotlib, a drugi spiskującego na rysunku seaborn przed resetowanie do oryginalnych warunków matplotlib. Kolor kropek na post-seaborn był wyraźnie mniej intensywny \ kontrastowy niż ten z niezmienioną konfiguracją matplotlib (jak gdyby miały trochę przezroczystości). – joaquin

+2

Może najlepiej byłoby udostępnić kod, aby inni mogli odtworzyć ten problem? – tom

0

Jak wyjaśniono in this other question można importować z Seaborn:

import seaborn.apionly as sns 

A style matplotlib nie zostaną zmienione.

1

Możesz użyć funkcji matplotlib.style.context zgodnie z opisem w 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

Przywracanie wszystkich params RC do oryginalnych ustawień (szanuje niestandardową RC) jest dozwolony przez seaborn.reset_orig() funkcji

3

Od Seaborn wersji 0.8 (lipiec 2017) styl wykresu nie jest zmieniany na import. Żądanie OP jest teraz domyślnym zachowaniem.Od https://seaborn.pydata.org/whatsnew.html:

Domyślna (Seaborn) styl nie jest już stosowana przy Seaborn jest importowane. Teraz konieczne jest jawne wywołanie metody set() lub jednego lub więcej zestawu set_style(), set_context() i set_palette(). Odpowiednio, moduł seaborn.apionly został uznany za przestarzały.

Możesz wybrać styl dowolnej fabuły za pomocą 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) 

Więcej na plt.style() here

+0

Musiałem zrobić 'plt.style.use ('classic')', aby uzyskać domyślny styl matplotlib. –

Powiązane problemy