2014-11-11 13 views
16

Wykreślam dwie serie danych z Pandami z importowanym seabornem. Idealnie chciałbym, aby poziome linie siatki były dzielone między lewą i prawą osią Y, ale mam wrażenie, że jest to trudne.Jak pozbyć się linii siatki podczas rysowania z Seaborn + Pandy z secondary_y

Jako kompromis chciałbym usunąć wszystkie linie siatki razem. Poniższy kod tworzy jednak poziome linie siatki dla pomocniczej osi y.

import pandas as pd 
import numpy as np 
import seaborn as sns 


data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B']) 
data.plot(secondary_y=['B'],grid=False) 

gridlines that I want to get rid of

+0

Czego używasz w ustawieniach kolorów? Obraz nie jest domyślnym matplotlib. Mogę się założyć, że to właśnie powoduje problemy – DataSwede

+0

@DataSwede wygląda na domyślny schemat pandy ... i otrzymuję te linie – Ajean

+0

DataSwede: Dzięki za wskazanie. Jego Seaborn. Zaktualizowałem swój kod. –

Odpowiedz

9

Problem jest z wykorzystaniem domyślnych pandy formatowania (lub cokolwiek formatowania wybrałeś). Nie wiesz, jak to działa za kulisami, ale te parametry przejmują formatowanie, które przekazujesz tak, jak w funkcji fabuły. Można zobaczyć ich listę here in the mpl_style dictionary

W celu poruszania się po nim, można to zrobić:

import pandas as pd 
pd.options.display.mpl_style = 'default' 
new_style = {'grid': False} 
matplotlib.rc('axes', **new_style) 
data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B']) 
data.plot(secondary_y=['B']) 

enter image description here

+0

Nie wiem, czy powinienem oznaczyć to jako zaakceptowaną odpowiedź, ponieważ działa to na pewno, ale byłoby miło, gdyby był sposób, aby to zrobić "natywnie" u samców. –

4

to czuje się jak zachowanie buggy w Pand, ze nie wszystkie słowa kluczowego argumenty są przekazywane do obu osi. Ale jeśli chcesz mieć domyślnie siatkę w seaborn, wystarczy zadzwonić pod numer sns.set_style("dark"). Możesz także użyć instrukcji sns.axes_style w instrukcji with, jeśli chcesz zmienić domyślną wartość dla jednej figury.

15
sns.set_style("whitegrid", {'axes.grid' : False}) 

Należy zauważyć, że styl może być dowolny poprawny który wybrać.

Aby uzyskać fajny artykuł na ten temat, zapoznaj się z this site.

+0

[fixed link] (http://gree2.github.io/python/2015/05/05/python-seaborn-tutorial- controlling-figure-esthetics) – Qlaus

20

Możesz usunąć obiekt Axes po wykreśleniu i wykonać .grid(False) na obu osiach.

# Gets the axes object out after plotting 
ax = data.plot(...) 

# Turns off grid on the left Axis. 
ax.grid(False) 

# Turns off grid on the secondary (right) Axis. 
ax.right_ax(False) 
+1

'ax.grid (False)' było jedyną rzeczą, która pracował dla mnie. Dzięki. – Chuck

+2

To jest najlepsza odpowiedź, ponieważ można z niej korzystać zarówno z seaborn, pand i matplotlib. Po prostu wywołaj 'ax.grid (False)' na dowolnych osiach, których potrzebujesz. –

Powiązane problemy