2014-09-06 2 views
7

간단한 정수 인덱스와 5 개의 열이있는 DataFrame (data)이 있습니다. 열은 Date, Country, AgeGroup, Gender, Stat입니다. (무고한 사람을 보호하기 위해 이름이 바뀌 었습니다.) FacetGrid을 만들고 싶습니다. 여기에서 Country은 행을 정의하고 AgeGroup은 열을 정의하고 Gender은 색조를 정의합니다. 이러한 각 세부 사항에 대해 시계열 그래프를 만들고 싶습니다. 나는. 각 그래프에는 두 개의 시계열이 있습니다 (남성 1 명, 여성 1 명). 나는 매우 가까워 질 수 있습니다 :Seaborn FacetGrid를 사용하여 시계열 그리기

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

그러나 이것은 단지 x- 축의 샘플 번호 대신 날짜를 제공합니다. 이 문맥에서 빠른 수정이 있습니까?

더 일반적으로는 FacetGrid의 접근 방식은 그리드를 만들고 나서 map 플롯 기능을 사용한다는 것을 이해합니다. 내 플로팅 기능을 롤업하려면 팔로우해야하는 규칙은 무엇입니까? 특히, 내 데이터 집합에서 여러 열의 데이터를 허용하는 플로팅 함수 (mapFacetGrid 전달)를 작성하려면 어떻게해야합니까?

+0

"이 코드는 날짜가 아닌 x 축에서 샘플 번호를 제공합니다"라고 말하면 날짜가 어디에서 오는 지 명확하지 않습니다. 이 항목이 데이터 프레임의 다른 열입니까? – mwaskom

+0

예, 위의 내용을 보면'Date'라는 열이 있는데이 열을 사용하여 의미있는 x 축 틱을 생성하고 싶습니다. – 8one6

+0

죄송합니다. 죄송합니다. – mwaskom

답변

9

먼저 일반적인 질문에 답변 해 드리겠습니다. 만약 FacetGrid.map에 전달할 수있는 기능에 대한 규칙은 다음과

  • 그들은 비록 (X 축 및 Y 축에 대응하는 제 2 인자에 대응하는 제 인수, 위치 인수로 배열 형 입력을해야 두 번째 조건에 대한 자세한 곧
  • 그들은 또한 두 개의 키워드 인자 수용해야합니다. colorlabel 당신이 이러한 기본 플롯 함수에 전달 얻을해야보다 hue 변수를 사용하려면 어떻게 그냥 **kwargs을 잡을 수 없지만 당신이 만들고있는 특정 음모와 관련이 없다면 그들과 관련된 모든 것.
  • 호출되면, 그들은 "현재 활성화 된"matplotlib 축에 플롯을 그려야합니다.

는 함수가 x, y, 위치 입력을 복용하지 않고 올바른 보이는 그래프를 그리는 경우가있을 수 있습니다. 기본적으로 여기에 plt.plot을 사용하는 방식으로 진행되고 있다고 생각합니다. map을 사용한 후에는 바로 전화하기가 더 쉽습니다 (예 : g.set_axis_labels("Date", "Stat")). 그러면 축의 이름이 올바르게 바뀝니다. 좀 더 의미있는 틱을 얻으려면 g.set(xticklabels=dates)을 할 수도 있습니다.

좀 더 일반적인 기능인 FacetGrid.map_dataframe도 있습니다. 여기에있는 규칙은 비슷하지만 전달하는 함수는 data이라는 매개 변수에서 데이터 프레임 입력을 받아 들여야하며 배열과 같은 위치 입력을 수행하는 대신 해당 데이터 프레임의 변수에 해당하는 문자열을 사용합니다. 패싯을 통한 각 반복에서 함수는 입력 데이터 프레임이 row, col 및 레벨의 해당 조합에 대한 값으로 마스킹 된 상태에서 호출됩니다.

그래서 특정 경우에, 당신은 우리가 같은 것을 보일 것입니다 그 plot_by_date를 호출 할 수있는 기능을 작성해야 :

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

    ... 

(나는 몸에 더 도움이 될 것입니다,하지만 난 실제로 날짜와 matplotlib를 많이 사용하는 방법을 모르는 경우).최종 결과는이 함수를 호출 할 때 현재 활성화 된 Axes에 그려야한다는 것입니다. 그 다음에 do

g.map(plot_by_date, "Date", "Stat") 

그리고 그것은 잘되어야한다고 생각합니다.

+1

내가 의미하는 바는, 내 자신의 기능을 롤백하려면 무엇을 반환해야합니까? 나는. 'y = 2'에서 각 패싯에 수평선을 그리고 모든 입력 데이터를 무시하는 어리석은 함수를 만들고 싶습니다. 그러면 그 기능은 어떻게 생겼을까요? – 8one6

+2

아, 반환 값은 무시됩니다 .... 중요한 것은 함수 *가 * plot된다는 것입니다. 사실 구체적인 예제를 위해서'g.map (plt.axhline, y = 2)'만 할 수 있습니다. 그것이 일반적인 이해를 돕는 지 확실하지 않습니다. – mwaskom

+1

나는 구체적으로 무엇을하려고하는지 조금 더 추가했습니다. – mwaskom