ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Matplotlib (1) - 그래프
    파이썬 Python/데이터 분석 2022. 2. 16. 20:44

    Matplotlib 패키지를 활용한 데이터 시각화

    - 맷플롯립(Matplotlib)은 그래프나 차트 등 그래픽으로 표현하는데 사용하는 파이썬 기반 2D 시각화 라이브러리

    - 판다스와 연계하여 데이터를 다양한 방식으로 시각화하는 기능을 제공한다.

    - 숫자 데이터를 그래프로 시각화하면 한눈에 데이터를 파악할 수 있어서 편리하다.

    - MATLAB(과학 및 공학 연산을 위한 소프트웨어)의 시각화 기능을 모델링해서 만들어졌다.

    - 2차원 그래프(plot), 산점도(scatter plot), 막대 그래프(bar chart), 히스토그램(histogram), 파이 그래프(pie chart) 등을 그릴 수 있다.

     

     

    선 그래프

    from matplotlib import pyplot   # 방법1
    
    import matplotlib.pyplot as plt # 방법2
    import numpy
    
    data1 = [10, 14, 19, 20, 25] 
    
    # list 이용
    # x축을 지정하지 않으면 0부터 1씩 증가값을 가지고, 데이터는 y축 값이 된다.
    pyplot.plot(data1) # (0, 10), (1, 14), (2, 19), (3, 20), (4, 25) 값으로 선 그래프 출력
    pyplot.show()      # 객체 정보없이 그래프만 출력
    
    # numpy 배열 이용
    arr = numpy.array(data1)
    pyplot.plot(arr) # (0, 10), (1, 14), (2, 19), (3, 20), (4, 25) 값으로 선 그래프 출력
    pyplot.show()    # 객체 정보없이 그래프만 출력
    
    # x축, y축 값 지정
    # plot(x축, y축)
    pyplot.plot([1, 2, 3, 4, 5], data1)
    pyplot.show()

    우측 콘솔창 위의 Plots를 클릭하여 그래프 확인

     

     

    2차원 선 그래프

    from matplotlib import pyplot
    import numpy
    
    x = numpy.arange(-4.5, 5, 0.5) # 배열 생성, -4.5<=값<5, 0.5씩 증가
    y = 2*x**2                     # y = 2x²
    
    print('x :', x)
    print('y :', y)
    
    pyplot.plot(x, y)
    pyplot.show()

    x : [-4.5 -4.  -3.5 -3.  -2.5 -2.  -1.5 -1.  -0.5  0.   0.5  1.   1.5  2.
      2.5  3.   3.5  4.   4.5]
    y : [40.5 32.  24.5 18.  12.5  8.   4.5  2.   0.5  0.   0.5  2.   4.5  8.
     12.5 18.  24.5 32.  40.5]

     

     

     

    여러 그래프

    from matplotlib import pyplot
    import numpy
    
    x = numpy.arange(-4.5, 5, 0.5) # 배열 생성, -4.5<=값<5, 0.5씩 증가
    y1 = 5*x + 30                  # y = 5x+30
    y2 = 2*x**2                    # y = 2x²
    y3 = 4*x**2 + 10               # y = 4x²+10
    
    pyplot.plot(x, y1)             # 선 그래프 출력  
    pyplot.show()
    
    pyplot.plot(x, y2) 
    pyplot.show()
    
    pyplot.plot(x, y3) 
    pyplot.show()
    
    pyplot.plot(x, y1, x, y2, x, y3) 
    pyplot.show()
    
    pyplot.figure(1)    # 번호 지정해서 그래프 창을 생성
    pyplot.plot(x, y1)  # 선 그래프 출력
    
    pyplot.figure(1)    # 1번 그래프 창에 추가
    pyplot.plot(x, y3) 
    pyplot.show()

     

     

    2 x 2 행렬의 하위 그래프 위치 지정 후 그래프 출력

    from matplotlib import pyplot
    import numpy
    
    # 데이터 생성
    x = numpy.arange(0, 10, 0.1)
    y1 = 0.3*(x-5)**2 + 1 # y = 0.3(x-5)²+1
    y2 = -1.5*x + 3       # y = -1.5x+3
    y3 = numpy.sin(x)**2  # y = sin(x)²
    y4 = 10*numpy.exp(-x) + 1
    
    # 2 x 2 행렬의 하위 그래프에 위치 지정 후 그래프 출력
    pyplot.subplot(2, 2, 1) # (0, 0) 위치
    pyplot.plot(x, y1)
    
    pyplot.subplot(2, 2, 2) # (0, 1) 위치
    pyplot.plot(x, y2)
    
    pyplot.subplot(2, 2, 3) # (1, 0) 위치
    pyplot.plot(x, y3)
    
    pyplot.subplot(2, 2, 4) # (1, 1) 위치
    pyplot.plot(x, y4)
    pyplot.show()

     

    그래프의 출력 범위 지정해서, 관심 영역을 확대해서 보기

    from matplotlib import pyplot
    import numpy
    
    # 데이터 생성
    x = numpy.linspace(-4, 4, 100) # [-4, 4] 범위에서 100개의 값 생성
    y1 = x**3                      # y = x³
    y2 = 10*x**2 - 2               # y = 10x² - 2
    
    # 데이터 확인
    print("x : ")
    print(x)
    
    # 그래프 출력
    pyplot.plot(x, y1, x, y2)
    pyplot.show()
    
    # 그래프 확대해서 보기
    pyplot.plot(x, y1, x, y2)
    pyplot.xlim(-1, 1)
    pyplot.ylim(-3, 3)
    pyplot.show()

     

     

    선 색상, 선 스타일, 마커 지정

    from matplotlib import pyplot
    import numpy
    
    # 데이터 생성
    x = numpy.arange(0, 5, 1) # 0~4 정수 배열 생성
    y1 = x 
    y2 = x + 1 
    y3 = x + 2 
    y4 = x + 3 
    
    # 그래프 출력
    pyplot.plot(x, y1, x, y2, x, y3, x, y4)
    pyplot.show()
    
    # 선 색상 지정 : magenta, yellow, black, cyan
    pyplot.plot(x, y1, 'm', x, y2, 'y', x, y3, 'k', x, y4, 'c')
    pyplot.show()
    
    # 선 스타일 지정 : 실선, 파선, 점선, 파선 점선 혼합선
    pyplot.plot(x, y1, '-', x, y2, '--', x, y3, '-.')
    pyplot.show()
    
    # 마커 지정 : 원, 삼각형, 사각형, 다이아몬드
    pyplot.plot(x, y1, 'o', x, y2, '^', x, y3, 's', x, y4, 'd')
    pyplot.show()
    
    # 선 색상, 선 스타일, 마커를 혼합해서 지정
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    pyplot.show()

     

     

    x축 라벨, y축 라벨, 그래프 제목, 범례 추가

    from matplotlib import pyplot
    import numpy
    
    # 데이터 생성
    x = numpy.arange(0, 5, 0.5) # 0~4.5 배열 생성
    y1 = x 
    y2 = x + 1 
    y3 = x + 2 
    y4 = x + 3
    
    # 그래프 출력
    pyplot.plot(x, y1)
    pyplot.xlabel('X-axis')    # x축에 문자열 출력
    pyplot.ylabel('Y-axis')    # y축에 문자열 출력
    pyplot.title('Plot Graph') # 제목 출력
    pyplot.grid(True)          # 격자 출력, True는 생략 가능
    pyplot.show()
    
    # 선 색상, 선 스타일, 마커를 혼합해서 지정
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    pyplot.legend(['data1', 'data2', 'data3', 'data4']) # 범례 출력
    pyplot.show()
    
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    # 범례 위치지정, 위는 upper 아래는 lower
    pyplot.legend(['y = x', 'y = x + 1', 'y = x + 2', 'y = x + 3'], loc='lower right') 
    pyplot.show()

     

     

    matplotlib 그래프에 한글 사용하기

    from matplotlib import pyplot
    import numpy
    
    # 데이터 생성
    x = numpy.arange(-1, 5, 0.5) # 0~4.5 배열 생성
    y1 = x 
    y2 = x + 1 
    y3 = x + 2 
    y4 = x + 3 
    
    # 그래프 출력
    # 선 색상, 선 스타일, 마커를 혼합해서 지정
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    pyplot.xlabel('X-axis')                             # x축에 문자열 출력
    pyplot.ylabel('Y-axis')                             # y축에 문자열 출력
    pyplot.title('Plot Graph')                          # 제목 출력
    pyplot.grid(True)                                   # 격자 출력, True는 생략 가능
    pyplot.legend(['data1', 'data2', 'data3', 'data4']) # 범례 출력
    pyplot.show()
    
    # 한글 설정
    pyplot.rcParams['font.family'] = 'Malgun Gothic' # 맑은 고딕으로 설정
    pyplot.rcParams['axes.unicode_minus'] = False    # 마이너스 기호 깨짐 방지
    
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    pyplot.xlabel('X축')                                      # x축에 문자열 출력
    pyplot.ylabel('Y축')                                      # y축에 문자열 출력
    pyplot.title('선 그리기')                                 # 제목 출력
    pyplot.grid(True)                                         # 격자 출력, True는 생략 가능
    pyplot.legend(['데이터1', '데이터2', '데이터3', '데이터4']) # 범례 출력
    pyplot.show()
    
    pyplot.plot(x, y1, 'm-o', x, y2, 'y--^', x, y3, 'k:s', x, y4, 'c-.d')
    pyplot.text(0, 6, '데이터1')  # (0, 6) 좌표에 '데이터1' 출력
    pyplot.text(0, 5, '데이터2')  # (0, 5) 좌표에 '데이터2' 출력
    pyplot.text(3, 1, '데이터3')  # (3, 1) 좌표에 '데이터3' 출력
    pyplot.text(3, 0, '데이터4')  # (3, 0) 좌표에 '데이터4' 출력
    pyplot.show()

     

Designed by Tistory.