이번에는 seaborn라이브러리에서 lmplot()메소드를 이용한 산점도 그래프에서 성별에 따른 기호와 기호의 크기, 색상을 다르게 출력하여 보자. 앞에서 보았듯이 기준 변수 값에 따른 색상 변화를 주기 위해서는 hue매개변수의 값에 기준 변수명을 넣어주었다. 여기까지는 지난 포스팅에서 다루었었다. 이번에 주목해서 보아야할 매개변수 값은 markers, scatter_kws 매개변수를 주목해서 보면 된다. 우선 지불값과 성별에 따른 팁의 크기 그래프를 lmplot()으로 그려보자. hue매개변수를 이용해서 색상 구분하는거까지 해보자.
여기서 우선 성별에 따른 기호를 다르게 구분하고 싶다고 가정하자. 예시를 들어 'o'라는 기호와 'x'라는 기호로 표현하고 싶다고 하면 다음과 같이 나타내 주면 된다.
markers라는 매개변수값에 리스트 형태로 표시해줄 기호를 전달해 주면 된다. 필자의 경우에는 남성은 O표시로 여성은 X표시로 나타내어 주겠다고 명시해 주었다. 이제 마지막으로 남은것은 기호의 크기이다. 기호의 크기를 넣어줄 때는 scatter_kws매개변수에 대한 값을 딕셔너리 형태로 넣어주면 된다. 앞에서 matplotlib 라이브러리에서 다변량 산점도 그래프를 작성해 줄 때 크기값에 대한 매개변수를 s로 지정해 주었는데 seaborn라이브러리의 다변량 산점도 그래프를 그릴때 기호 크기 조절을 위해서 scatter_kws속성에 딕셔너리값의 key부분에 's'를 넣어주면 된다. 그 다음 value부분에는 크기를 판별할 기준 변수를 넣어주면 된다(필요에 따라 크기를 확실히 구분하기 위해 일정 수를 곱하기도 한다).
scatter_kws속성의 값에 키값은 size를 의미하는 's'문자를, value값은 데이터프레임의 size변수의 값을 넣어주었다. value값에 대해 일정량을 곱해주지 않으면 밑의 사진과 같이 기호의 크기를 왜넣었나 싶을정도로 크기 구분이 안되는것을 볼 수 있다. 여기서는 10을 곱해줌으로서 좀더 시각적으로 크기의 차이점을 구분하였다.
이번에는 앞에서 보았던 anscombe데이터 셋을 불러와보자. anscombe데이터 프레임은 다음과 같이 이루어져 있다.
I,II,III,IV라는 클래스를 가진 데이터 셋이 있고, 각각의 행별로 x,y값을 가지고 있는것을 볼 수 있다. 여기서 만약 내가 x,y의 값에 대한 그래프를 dataset매개변수값에 따른(I,II,III,IV) 각각의 산점도 그래프를 그리고 싶다고 가정해 보자. 그런 경우에는 다음과 같이 코드를 작성해 주면 된다.
우선 동일하게 산점도 그래프이고, hue, col, col_wrap과 같은 매개변수 값을 지원하지 않는 regplot()와 달리 이러한 세부 매개변수를 지원하는 lmplot()메소드를 이용해서 산점도 그래프를 그렸다. 우선 하나씩 해석해 보자. 앞에서 보았던거와 동일하게 우선적으로 메소드가 참조할 데이터프레임이 저장된 변수를 data매개변수에 넣어놓고, x,y 매개변수값 안에는 data매개변수에 전달된 데이터 프레임의 변수들중 x,y축이 될 변수 명을 적어주면 된다. 그 다음 선택 사항이지만 필자의 경우에는 각각의 dataset변수에 있는 변수 값에 따른 색상을 다르게 하기 위해서 hue매개변수에 dataset매개변수를 전달하여 dataset의 값에 따른 색상 차이를 주었다. 그 후 col 변수에는 hue매개변수에 넣는것과 동일하게 데이터 그룹을 구분할 변수의 값을 넣어주었다. col_wrap의 매개변수 값으로는 한 행에 최대 몇개의 그래프까지 작성해줄 수 있는지에 대한 값을 넣어주는 매개변수이다. 필자의 경우에는 col_wrap의 값을 2로 해주었기 때문에 한 행에 2개의 그래프만 그려져 나오는 것이다. 다른 경우로 만약 col_wrap의 값을 4로 설정해 주면 다음과 같이 나온다.
필자는 여러 형태로 변형하던 도중 재미있는 상황을 마주쳤었다. 만약 col_wrap의 값을 1로 설정하면 어떻게 될까 상상해 보자. dataset 값이 I,II,III,IV값에 대한 각각의 그래프가 한개씩 4줄로 나올꺼라 흔히 생각할 수 있다. 하지만 결과값은 다르게 나왔다.
col_wrap의 값을 1로 두게 되면 그래프의 격자가 4줄로 생성이 되는것까지 볼 수 있다. 하지만 그래프가 한개의 그래프에 몰려서 작성되는것을 볼 수 있다. 필자의 생각이지만 lmplot()메소드이 col_wrap매개변수에서 1값을 단지 행구분이 아닌 기본값으로 생각하고 그래프를 작성한다고 생각이 든다. 혹시라도 정확한 답변을 아는 분이 있다면 댓글에 남겨주세용....
-Matplotlib, Seaborn라이브러리 폭넓게 활용해보기 끝-
'DataAnalysis > Python Pandas' 카테고리의 다른 글
누락값(NaN) - 1 (2) | 2019.05.05 |
---|---|
read_csv utf-8 관련 오류 : UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte (0) | 2019.03.20 |
데이터 시각화 : Seaborn 라이브러리 폭넓게 활용해 보기 (0) | 2019.03.11 |
데이터 시각화 : Matplotlb 라이브러리 폭넓게 활용해보기 (0) | 2019.03.10 |
판다스 데이터 시각화 - 그래프 그리기, matplotlib : 2 (0) | 2019.03.09 |