2014-09-06 10 views
7

Mam DataFrame (data) z prostym indeksem całkowitym i 5 kolumnami. Kolumny to: Date, Country, AgeGroup, , . (Nazwy zmieniły się, by chronić niewinnych.) Chciałbym stworzyć FacetGrid, gdzie Country definiuje wiersz, AgeGroup definiuje kolumnę, a Gender definiuje barwę. W odniesieniu do każdego z tych danych chciałbym stworzyć wykres szeregów czasowych. To znaczy. Powinienem otrzymać tablicę wykresów, z których każda zawiera dwie serie czasowe (1 mężczyzna, 1 kobieta). Mogę się bardzo zbliżyć do:Wyznaczanie szeregu czasowego przy użyciu Seaborn FacetGrid

g = sns.FacetGrid(data, row='Country', col='AgeGroup', hue='Gender') 
g.map(plt.plot, 'Stat') 

To jednak daje mi numer próbki na osi X, a nie daty. Czy istnieje szybka naprawa w tym kontekście.

Ogólnie rozumiem, że podejście z FacetGrid polega na utworzeniu siatki, a następnie map jej funkcji kreślącej. Gdybym chciał rzucić moją własną funkcją kreślenia, jakie konwencje musi przestrzegać? W szczególności, w jaki sposób mogę napisać własną funkcję drukowania (przejść do map dla FacetGrid), która akceptuje wiele kolumn wartości danych z mojego zestawu danych?

+0

Kiedy mówisz "to po prostu podaje mi numer próbki na osi X, a nie daty", nie jest jasne, skąd powinny pochodzić daty. Czy to jest inna kolumna w Twojej ramce danych? – mwaskom

+0

Tak, patrz wyżej, znajduje się kolumna o nazwie "Data" i chciałbym jej użyć do wygenerowania znaczących tyknięć osi X. – 8one6

+0

Ups, przepuściłem to, przepraszam. – mwaskom

Odpowiedz

9

Najpierw odpowiem na bardziej ogólne pytanie. Zasady dotyczące funkcji, które można przekazać do FacetGrid.map są:

  • Muszą wziąć wejść tablicy podobny jak pozycyjnych argumentów, z pierwszego argumentu odpowiadającej osi x oraz drugiego argumentu odpowiadającej osi y (choć, więcej na drugim stanie wkrótce
  • muszą także przyjąć dwa argumenty słów kluczowych. color i label Jeśli chcesz użyć hue zmienną niż powinny przejdzie do funkcji bazowych spisek, choć może po prostu złapać **kwargs i nie zrobić cokolwiek z nimi, jeśli nie ma to związku z konkretną fabułą.
  • Po wywołaniu, muszą narysować wykres na "aktualnie aktywnych" osiach Matplotlib.

Może się zdarzyć, że twoja funkcja narysuje wykres, który wygląda prawidłowo bez przyjmowania x, y, danych wejściowych pozycji. Myślę, że to w zasadzie to, co się tutaj dzieje, ze sposobem, w jaki używasz plt.plot. Łatwiej jest wtedy po prostu zadzwonić, np. g.set_axis_labels("Date", "Stat") po użyciu map, która zmieni nazwę twoich osi prawidłowo. Możesz także chcieć zrobić g.set(xticklabels=dates), aby uzyskać bardziej znaczące tyknięcia.

Istnieje również bardziej ogólna funkcja, FacetGrid.map_dataframe. Reguły tutaj są podobne, ale funkcja, którą przekazujesz, musi akceptować dane wejściowe do ramki danych w parametrze o nazwie data, i zamiast przyjmować tablicowe wejścia pozycyjne, pobiera ciągi, które odpowiadają zmiennym w tej ramce danych. Przy każdej iteracji poprzez fasety funkcja będzie wywoływana z maskowaną wejściową ramką danych do wartości dla tej kombinacji poziomów row, i hue.

więc w konkretnym przypadku trzeba napisać funkcję, które możemy nazwać plot_by_date który powinien wyglądać tak:

def plot_by_date(x, y, color=None, label=None): 

    ... 

(byłbym bardziej pomocny na ciele, ale tak naprawdę nie wiem jak zrobić wiele z datami i matplotlib).Końcowym rezultatem jest to, że kiedy wywołujesz tę funkcję, powinna ona narysować na aktualnie aktywnych osiach. I powinien działać, jak sądzę.

+1

Chodziło mi o to, że jeśli chcę wykonać swoją własną funkcję, co powinienem zwrócić? To znaczy. mówię, że chcę zrobić głupią funkcję, która po prostu rysuje poziomą linię w każdym elemencie w 'y = 2' i ignoruje wszystkie dane wejściowe. Więc jak by wyglądała ta funkcja? – 8one6

+2

Ah, zwracana wartość jest ignorowana .... ważne jest, że funkcja * kreśli *. Właściwie dla tego konkretnego przykładu możesz po prostu zrobić 'g.map (plt.axhline, y = 2)'. Nie jestem pewien, czy to pomoże ci w ogólnym zrozumieniu. – mwaskom

+1

Dodałem trochę więcej informacji o tym, co konkretnie chcesz zrobić. – mwaskom

Powiązane problemy