Jestem pewien, że zapominam o czymś bardzo prostym, ale nie mogę zmusić pewnych fabuł do współpracy z Seaborn.
Jeśli zrobię:
import seaborn as sns
Następnie wszelkie wątki, które tworzę jak zwykle za pomocą matplotlib, otrzymują styl Seaborn (z szarą siatką w tle).
Jeśli jednak spróbuję wykonać jeden z przykładów, na przykład:
In [1]: import seaborn as sns
In [2]: sns.set()
In [3]: df = sns.load_dataset('iris')
In [4]: sns.pairplot(df, hue='species', size=2.5)
Out[4]: <seaborn.axisgrid.PairGrid at 0x3e59150>
Funkcja pairplot zwraca obiekt PairGrid, ale wykres nie pojawia się.
Jestem trochę zdezorientowany, ponieważ matplotlib wydaje się działać poprawnie, a style Seaborn są stosowane do innych wykresów matplotlib, ale funkcje Seaborn wydają się nic nie robić. Czy ktoś ma pojęcie, co może być problemem?
python
matplotlib
seaborn
robc89
źródło
źródło
%matplotlib inline
aby określić wbudowany backend. W przeciwnym razie możesz zadzwonić,sns.plt.show()
aby renderować wykres w osobnym oknie.Odpowiedzi:
Wykresy utworzone przy użyciu dna morskiego muszą być wyświetlane jak zwykłe wykresy matplotlib. Można to zrobić za pomocą
funkcja z matplotlib.
Pierwotnie zamieściłem rozwiązanie, aby użyć już zaimportowanego obiektu matplotlib z seaborn (
sns.plt.show()
), ale jest to uważane za złą praktykę. Dlatego po prostu zaimportuj bezpośrednio moduł matplotlib.pyplot i pokaż swoje wykresy za pomocąJeśli używany jest notatnik IPython, można wywołać wbudowany backend, aby wyeliminować konieczność wywoływania show po każdym wątku. Odpowiednia magia to
źródło
%matplotlib qt
,%matplotlib gtk
,%matplotlib tk
itp zobaczyć%matplotlib?
więcej informacji%matplotlib inline
do jakiegoś pliku konfiguracyjnego, aby zawsze był stosowany? Czy zawsze muszę dodawać go do każdego nowego skoroszytu?Przychodzę do tego pytania dość regularnie i zawsze zajmuje mi trochę czasu znalezienie tego, czego szukam:
Uwaga: W Pythonie 2 możesz także używać
sns.plt.show()
, ale nie w Pythonie 3.Kompletny przykład
Daje
źródło
AttributeError: module 'seaborn' has no attribute 'plt'
sns.plt
Aby uniknąć nieporozumień (jak się wydaje w komentarzach). Zakładając, że jesteś na Jupyter:
%matplotlib inline
> wyświetla wykresy WEWNĄTRZ notebookasns.plt.show()
> wyświetla wykresy NA ZEWNĄTRZ notebooka%matplotlib inline
będzie przesłonićsns.plt.show()
w tym sensie, że działki zostaną pokazane IN notebooka nawet gdysns.plt.show()
nazywa.I tak, łatwo jest dołączyć linię do konfiguracji:
Automatycznie uruchom% matplotlib inline w IPython Notebook
Wydaje się jednak, że lepszą konwencją jest utrzymanie go razem z importem w rzeczywistym kodzie.
źródło
To zadziałało dla mnie
źródło
Moja rada to tylko dać
plt.figure()
i podaj trochę wykresu sns. Na przykładsns.distplot(data)
.Choć będzie wyglądać, nie pokazuje żadnej fabuły, gdy zmaksymalizujesz figurę, będziesz mógł zobaczyć fabułę.
źródło
plt.figure()
) przed wykonaniem mojego wykresu liniowego i nie rozumiałem, dlaczego wykres nie pojawił się. Wspaniale, dziękuje!Jeśli drukujesz w konsoli IPython (gdzie nie możesz używać
%matplotlib inline
) zamiast w notesie Jupyter i nie chcesz uruchamiać sięplt.show()
wielokrotnie, możesz uruchomić konsolę IPython za pomocąipython --pylab
:źródło
Mówiąc po stylu fragmentu kodu, przypuszczam, że używasz IPython zamiast Jupyter Notebook.
W tym wydaniu GitHub członek IPython w 2016 roku wyjaśnił, że wyświetlanie wykresów będzie działało tylko wtedy, gdy „będzie działać tylko wtedy, gdy jest to jądro Jupyter”. Zatem
%matplotlib inline
nie zadziałałoby.Właśnie miałem ten sam problem i zasugerowałem, aby użyć do wizualizacji Notatnika Jupyter.
źródło