2015-10-13 9 views
14

Seaborn bietet eine Handvoll von Grafiken, die sehr interessant für die wissenschaftliche Datendarstellung sind. So begann ich diese Seaborn Grafiken mit anderen benutzerdefinierten Matplotlib Plots eingestreut. Das Problem ist, dass, wenn ich tun:Seaborn Konfiguration verbirgt Standard Matplotlib

import seaborn as sb 

Dieser Import der Grafikparameter für Seaborn global zu setzen scheint, und dann werden alle matplotlib Grafiken unter dem Import die Seaborn Parameter erhalten (sie einen grauen Hintergrund zu erhalten, linewithd Änderungen, usw. , etc).

In SO ist es an answer erklären, wie Seaborn Plots mit matplotlib Konfiguration zu produzieren, aber was ich will, ist die matplotlib Konfigurationsparameter unverändert zu halten, wenn beide Bibliotheken zusammen mit und in der gleichen Zeit zu produzieren in der Lage, bei Bedarf, original Seaborn-Parzellen.

+3

Mögliche Duplikat [Wie kann ich Seaborn verwenden, ohne die matplotlib Standardwerte zu ändern?] (Http://stackoverflow.com/questions/25393936/how-can -i-Use-seaborn-ohne-die-matplotlib-Standardeinstellungen ändern) – mwaskom

+0

Die Seaborn-Dokumentation ist ziemlich gut. Dies ist in der Nähe des Beginns der Installation docs abgedeckt: http://stanford.edu/~mwaskom/software/seaborn/installing.html?highlight=apionly#importing-seaborn –

+1

Ich bin mir nicht sicher, dass dies ein genaues Duplikat davon ist Frage: Es adressiert auch die Notwendigkeit, zwischen seaborn und matplotlib Standardeinstellungen dynamisch in einem Skript zu wechseln, das nicht in dem vorgeschlagenen Duplikat – tom

Antwort

16

Wenn Sie nie den seaborn Stil verwenden möchten, aber tun einige der Seaborn Funktionen möchten, können Sie Seaborn mit dieser folgende Zeile (documentation) importieren:

import seaborn.apionly as sns 

Wenn Sie mit ein paar Grundstücke produzieren wollen die seaborn Stil und einige ohne, im selben Skript, können Sie den seaborn Stil mit der seaborn.reset_orig Funktion deaktivieren.

Es scheint, dass die apionly Import im Wesentlichen setzt reset_orig automatisch beim Import, so dass es bis zu Ihnen, die am nützlichsten in Ihrem Anwendungsfall ist.

Hier ist ein Beispiel des Umschaltens zwischen matplotlib Defaults und 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') 

, das die folgenden drei Parzellen erzeugt:

seaborn-off.png: seaborn-off

seaborn-on.png: seaborn-on

seaborn-offagain.png: enter image description here

+0

Thanks, reset_orig() ist ein guter Ansatz, aber es produziert nicht genau die ursprüngliche Zahl in meinem Fall . Ich erstellte und speicherte eine Matplolib-Figur (zwei aufeinanderfolgende 'plots (xi, yi, '.')', Wobei xi und yi Listen von ein paar hundert Elementen waren) aus zwei verschiedenen ipython-Notizbüchern, eine mit gerader Matplotlib und eine andere mit einer Seabornfigur Zurücksetzen auf die ursprünglichen matplotlib-Bedingungen. Die Farbe der Punkte in der Post-Seaborn-Figur war bemerkenswert weniger intensiv als in der mit der unveränderten Matplotlib-Konfiguration (als ob sie eine gewisse Transparenz hätten). – joaquin

+2

Vielleicht wäre es am besten, etwas Code zu teilen, damit andere dieses Problem reproduzieren können? – tom

0

Wie erklärt in this other question Sie Seaborn mit importieren:

import seaborn.apionly as sns 

Und die matplotlib Stile werden nicht verändert werden.

1

Sie können die matplotlib.style.context Funktionalität wie in der style guide beschrieben verwenden.

#%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

Stellen Sie alle RC params auf die ursprünglichen Einstellungen (respektiert benutzerdefinierte rc) durch seaborn.reset_orig() Funktion erlaubt ist

3

Ab Seaborn Version 0.8 (Juli 2017) der Graphstil nicht mehr verändert wird, auf einführen. Der OP-Wunsch ist jetzt das Standardverhalten.Von https://seaborn.pydata.org/whatsnew.html:

Der Standard (Seaborn) Stil wird nicht mehr angewendet, wenn Seaborn ist importiert. Es ist jetzt erforderlich, explizit set() oder eine oder mehrere von set_style(), set_context() und set_palette() aufzurufen. Dementsprechend wurde das Modul seaborn.apionly als veraltet eingestuft.

Sie können den Stil eines Plots mit plt.style.use() auswählen.

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) 

Mehr auf plt.style() here

+0

Ich musste 'plt.style.use ('classic')' machen, um den Standard-Matplotlib-Stil zu erhalten. –

Verwandte Themen