본문 바로가기
데이터 분석

Matplotlib 그래프 & 그래프 세부설정 (라인그래프, 점그래프, 점&라인그래프, 면적그래프, 막대그래프), (스택 여부, 수평, 보조축)

by JoinInNoetic 2023. 11. 6.

◆ 인구이동 데이터 그래프 그리기

▶ 데이터 준비

 

▶ 누락값(NaN) 앞의 데이터로 채우기

    df.fillna(method='ffill')    # ffill : 포워드 필, 앞의 데이터로 채우기  / bfill : 백 필, 뒤의 데이터로 채우기

 

▶ 서울에서 다른 지역으로 이동한 데이터만 추출(불린인덱싱)

    - '전출지별' 컬럼의 값이 '서울특별시'인 것

    - '전입지별' 컬럼의 값이 '서울특별시'가 아닌것

 

▶ 컬럼 삭제 및 인덱스 설정

    df.drop(['전출지별'], axis=1) : '전출지별' 이라는 컬럼(axis=1)삭제

    df.rename({'전입지별' : '전입지'}, axis=1) : '전입지별'이라는 컬럼(axis=1)을 '전입지'로 변경

    df.set_index('전입지') : '전입지' 컬럼을 인덱스로 설정

 

 

▶ 서울 -> 경기도 데이터만 선택

 

 

▶ plot 그리기(x, y축 데이터 설정)

    plt.plot(sr.index, sr.values)    # 시리즈의 인덱스를 x축으로, 시리즈의 값을 y축으로 설정

    plt.plot(sr)    # 시리즈로 바로 그래프 그리기

 

▶ 다양한 그래프 설정

    plt.figure(figsize=(15,5))    # 그림 사이즈 지정 / 가로 15인치, 세로 5인치

    plt.style.use('ggplot')    # 그래프 배경을 격자 스타일로 설정

    plt.plot(x축데이터, y축데이터, marker = 'o', markersize=5)   

    # 각각의 값(marker)을 동그라미로 표시, marker크기를 5인치로 설정 

    # marker= 로 명시하지 않으면 기본값 점그래프

    plt.title('제목 텍스트', size = 30)    # '제목 텍스트'를 제목으로 설정, 제목의 크기를 30인치로 설정

    plt.xlabel('x축 이름', size = 20)    # 'x축 이름'으로 x축 이름설정, 크기를 20인치로 설정

    plt.xticks(size = 10, rotation = 'vertical')    # x축의 틱과 틱 이름을 10인치로 설정, 이름 각도를 수직으로 설정

    plt.ylabel('y축 이름', size = 20)    # 'y축 이름'으로 y축 이름 설정, 크기를 20인치로 설정

    plt.legend(labels=['범례 이름'], loc = 'best', fontsize = 15)   

    # '범례 이름'으로 범례 텍스트 설정, 위치는 가장 최선의 위치로, 텍스트 크기를 15인치로 설정)

                                                            'best', 'upper right', 'upper left', 'lower left', 'lower right', 'right',

                                                            'center left', 'center right', 'lower center', 'upper center', 'center'

    plt.ylim(최소값, 최대값)    # y의 범위를 최소값부터 최대값으로 설정

    plt.annotate(' ',     # 텍스트 주석 / 화살표 주석일 경우 빈칸

                        xy = (x좌표, y좌표)    # 화살표의 머리부분 위치

                        xytext = (x좌표, y좌표)    # 화살표의 꼬리부분 위치

                        xycoords = 'data'       # 좌표 체계 - 위도경도 or 데이터 기준

                        arrowprops = dict(arrowstyle='->', color = 'skyblue', lw = 5)   

                        # 화살표 서식 (화살표 스타일을 '->' 형태로, 색은 'skyblue'로, 폭은 5인치로 설정)

    plt.annotate('텍스트'    # 텍스트 주석의 텍스트

                        xy = (x좌표, y좌표)    # 텍스트 위치 기준점

                        rotation = 23    # 텍스트회전 각도 23도

                        va = 'baseline'    # 텍스트 상하 정렬(VerticalAlignment) / baseline : 텍스트의 baseline에 따라 달라짐

                                                                                                                  bottom : 좌표가 텍스트 아래 놓임

                                                                                                                  top : 좌표가 텍스트 위에 놓임

                                                                                                                  center : 수직방향으로 좌표 중앙에 놓임 

                        ha = 'center'        # 텍스트 좌우정렬(HorizontalAlignment) / center : 수평방향으로 좌표 중앙에 놓임

                                                                                                                       left : 좌표가 텍스트 왼쪽에 놓임

                                                                                                                       right : 좌표가 텍스트 오른쪽에 놓임

                        fontsize = 15)      # 텍스트 크기 15인치로 설정

 

※ x축 위치 반환

    sr.index.get_loc('x틱 이름')

 

◆ axe 객체 화면 분할

    axN(객체번호) = fig.add_subplot(화면 행개수, 화면 열개수, 순서 번호)

    axN.plot(          )  # plot그리는 것과 동일

 

◆ 한 화면에 여러개 라인그래프 그리기

▶ 데이터 선택

 

▶ 라인그래프 그리기

    - ax사용시 title, xlabel, ylabel 등 앞에 set_ 추가하기

    - 같은 화면에 그래프 그리기

        ax.plot()

 

 

※  matplotlib에 있는 color 정보

    matplotlib.colors.cnames.items()

 

◆ matplotlib 연습

 

 

◆ 면적그래프 

▶ 데이터 선택

 

▶ 면적그래프 그리기

    df.plot(kind='area', stacked=Fasle, alpha=0.2, figsize=(20,10))

          #  면적그래프       stack여부      흐린정도      화면크기

    ※ stacked=True    # stack 여부 true

※ 글씨체 설정

    weight='bold'        # 글씨 굵게

    color = 'blue'        # 글씨 색

 

◆ 비교 막대그래프 그리기

    df.plot(kind='bar', color=[색1, 색2, 색3, 색4])        # 각 컬럼별로 색깔 각각 부여

※ 위의 데이터처럼너무 많으면 불편함 -> 데이터 제한

 

◆ 스택 막대그래프

    df.plot(kind='bar', stacked=True)        # 스택여부 true

 

◆ 수평 막대 그래프 

▶ 데이터 합계 처리

 

▶ 수평그래프 그리기

    df.plot(kind='barh')       # bar : 막대그래프, h : 수평

 

◆ 보조축

▶ 데이터 선택

 

▶ 증감률 변동 계산

 

▶ 그래프 그리기

    axN.twinx()        # 쌍둥이 객체 -> y축을 오른쪽에 하나 추가해줌(2축)