-
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()
반응형'Python' 카테고리의 다른 글
python: pandas 라이브러리 정리 (0) 2021.06.06 Python: BeautifulSoup 라이브러리 정리(find, find_all, 태그, 클래스, id, 속성) (0) 2021.06.02 Python: numpy 라이브러리 정리(indexing, slicing, 정규분포 난수) (0) 2021.05.30 Python: Pillow 라이브러리 정리(이미지 편집, 이미지 필터, tkinter활용) (0) 2021.05.02 Python: Window programming Tkinter 라이브러리 정리 2 (0) 2021.04.16