ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python: matplot 라이브러리 정리 (선, 막대, 산포도, 파이, 히스토그램)
    Python 2021. 5. 31. 17:32

    데이터 시각화는 점이나 선, 막대 그래프 등의 시각적 이미지를 사용하여 데이터를 화면에 표시하는 기술이다. 

     

    또한 데이터 시각화를 통해서 데이터에 내재되어 있는 패턴을 알아내는데도 사용된다. 

     

    python에서는 matplot이라는 데이터 시각화 라이브러리를 제공하며

    간단한 막대 그래프, 선 그래프, 산포도를 그리는 용도로 활용 가능하다. 

     

     

     

    1. matplot 라이브러리 사용하기 

    import matplotlib.pyplot as plt
    years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
    gdp = [67, 80, 257, 1686, 6505, 11865, 22105]
    # 선 그래프를 그린다. x축에는 years, y축에는 gdp
    plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
    # 제목을 설정한다.
    plt.title('GDP per capita')
    # y축에 레이블 달기
    plt.ylabel('dollars')
    # png 이미지로 저장 가능
    plt.savefig('gdp_per_cpaita.png', dpi=600)
    plt.show()

     

     

     

    2. 함수 그래프 그리기 

    # y = 2x 그래프 그리기
    import matplotlib.pyplot as plt
    x = [x for x in range(-10, 10)]
    y = [2 * y for y in x]
    plt.plot(x, y, color='green', marker='o')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('y=2x')
    plt.show()

     

     

     

    # 여러가지 함수 그려보기
    import matplotlib.pyplot as plt
    x = [x for x in range(-20, 20)]
    y1 = [2*t for t in x]
    y2 = [t**2 + 5 for t in x]
    y3 = [-t**2 - 5 for t in x]
    # 빨간색 점선, 녹색 세모와 실선, 파란색 별표와 점선
    plt.plot(x, y1, 'r--', x, y2, 'g^-', x, y3, 'b*:')
    plt.show()

     

     

     

    3. 범례 표시하기 

    # 범례 표시하기
    import matplotlib.pyplot as plt
    x = [x for x in range(-20, 20)]
    y1 = [t for t in x]
    y2 = [t**2 + 5 for t in x]
    y3 = [-t**2-5 for t in x]
    
    plt.plot(x, y1, label='y=x')
    plt.plot(x, y2, label='y=x^2')
    plt.plot(x, y3, label='y=-x^2+5')
    
    plt.legend()  # legend을 통해 지정해준 레이블을 범례로 표시한다.
    plt.show()
    

     

     

     

    4. 막대 차트 그리기 

    #막대형 차트 그리기
    import matplotlib.pyplot as plt
    years = [x for x in range(2010, 2020)]
    gdp = [x for x in range(100, 700, 60)]
    
    plt.bar(range(10), gdp)
    # xticks는 가로축 범위의 눈금마다 부여할 눈금 값을 지정한다.
    plt.xticks(range(10), years)
    plt.show()

     

     

     

    import matplotlib.pyplot as plt
    years = [2000, 2001, 2002, 2003, 2004, 2005]
    ko = [100, 150, 200, 320, 400, 380]
    jp = [90, 150, 250, 300, 410, 500]
    ch = [95, 100, 120, 200, 400, 300]
    
    
    x_range = range(len(years))
    plt.bar(x_range, ko, width=0.25)
    plt.bar(x_range, jp, width=0.25)
    plt.bar(x_range, ch, width=0.25)
    plt.xticks(x_range, years)
    
    plt.show()

     

     

     

    5. numpy와 같이 이용하기 

    # numpy 이용하기
    import matplotlib.pyplot as plt
    import numpy as np
    years = [2000, 2001, 2002, 2003, 2004, 2005]
    ko = [100, 150, 200, 320, 400, 380]
    jp = [90, 150, 250, 300, 410, 500]
    ch = [95, 100, 120, 200, 400, 300]
    
    x_range = np.arange(len(years))
    plt.bar(x_range, ko, width=0.25)
    plt.bar(x_range + 0.3, jp, width=0.25)
    plt.bar(x_range + 0.6, ch, width=0.25)
    plt.xticks(x_range, years)
    plt.show()

     

     

     

    6. 산포도 그래프 그리기 

    # 산포도 그래프 그리기
    import matplotlib.pyplot as plt
    numX = [range(1, 11)]
    numY = [range(10, 0, -1)]
    plt.scatter(numX, numY, s=50, c='green')
    plt.title('scatter makes scatter graph')
    plt.xlabel('X Label')
    plt.ylabel('Y Label')
    plt.show()

     

     

     

    ※ 실습 문제 풀어보기 

    <정답>

    import matplotlib.pyplot as plt
    import numpy as np
    nd_array = np.random.randint(0, 50, size=(30, 2))
    plt.scatter(nd_array[:, 0], nd_array[:, 1])
    plt.show()

     

     

     

    7. 파이 차트 그리기 

    # 파이 차트 만들기
    import matplotlib.pyplot as plt
    # ratio 지정하기 
    times = [8, 14, 2]
    # label 지정하기(ratio에 맞게 순서대로 입력한다)
    timeslabels = ['sleep', 'study', 'play']
    plt.pie(times, labels=timeslabels, autopct="%.2f")
    # autopct는 파이차트 안에 표시될 숫자의 형식을 지정하며 소수점 이하 두자리까지 표시하도록 설정
    plt.show()

     

     

     

    8. 히스토그램 그리기 

    # 히스토그램 생성하기
    import matplotlib.pyplot as plt
    books = [1, 6, 2, 3, 1, 2, 0, 2]
    # 6개의 bin을 나누어 count한다.
    plt.hist(books, bins=6)
    plt.xlabel('books')
    plt.ylabel('frequency')
    plt.show()

     

     

     

    # 2개의 정규 분포를 하나의 차트 위에서 그리기 
    import numpy as np
    import matplotlib.pyplot as plt
    n_bins = 10
    # 정규 분포 생성 
    x = np.random.randn(1000)
    y = np.random.randn(1000)
    # 히스토그램 생성 
    plt.hist(x, n_bins, histtype='bar', color='red')
    plt.hist(y, n_bins, histtype='bar', color='blue', alpha=0.3)
    # alpha는 투명도 
    plt.show()

     

     

     

    ※ 실습 문제 풀어보기 

    import numpy as np
    import matplotlib.pyplot as plt
    standard = np.random.randn(10000)
    gauss = 10 + 2 * np.random.randn(10000)
    gauss2 = -6 + 3 * np.random.randn(10000)
    bins = 50
    plt.hist(standard, bins, color='blue', histtype='bar', alpha=0.3)
    plt.hist(gauss, bins, color='red', histtype='bar', alpha=0.3)
    plt.hist(gauss2, bins, color='green', histtype='bar', alpha=0.3)
    plt.show()
    

     

     

     

    9. 한 화면에 여러 그래프 그리기 

    # 한 화면에 여러 그래프 그리기
    import matplotlib.pyplot as plt
    # 전체 화면을 2 x 2로 나눈다.
    fig, ax = plt.subplots(2, 2, figsize=(5, 5))
    # 각 화면에 대한 plot을 그려준다.
    ax[0, 0].plot(range(10), 'r')
    ax[1, 0].plot(range(10), 'b')
    ax[0, 1].plot(range(10), 'g')
    ax[1, 1].plot(range(10), 'k')
    plt.show()

     

     

     

    # 한 화면에 여러가지 그래프 그리기
    import numpy as np
    import matplotlib.pyplot as plt
    # 2 x 100 정규분포 난수 data 생성
    data =np.random.randn(2, 100)
    # 2 x 2로 화면 나누기
    fig, axs = plt.subplots(2, 2, figsize=(5, 5))
    axs[0, 0].hist(data[0], bins=10)
    axs[0, 1].plot(data[0], data[1])
    axs[1, 0].scatter(data[0], data[1])
    axs[1, 1].hist2d(data[0], data[1])
    plt.show()
    
    # 다음 방식으로도 가능 
    # fig = plt.figure()
    # ax1 = fig.add_subplot(2, 2, 1)
    # ax2 = fig.add_subplot(2, 2, 2)
    # ax3 = fig.add_subplot(2, 2, 3)
    # ax4 = fig.add_subplot(2, 2, 4)
    # ax1.hist(data[0], bins=10)
    # ax2.plot(data[0], data[1])
    # ax3.scatter(data[0], data[1])
    # ax4.hist2d(data[0], data[1])
    # plt.show()

     

     

    반응형

    댓글

Designed by Tistory.