프로그래밍

[Python] Matplotlib 활용(1)

RainIron 2021. 5. 9. 15:16
반응형

1. Import 

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

 

2. plt.plot()

plt.plot([1, 2, 3, 4])
plt.show()

 

예시) x, y를 산점도로 표현(x: 0~100 임의의 정수 100개, y: 0~10 임의의 정수 100개)

x = np.random.randint(0, 100, 100)
y = np.random.randint(0, 10, 100)
plt.plot(x, y, 'bo')
plt.show()

* 정규분포를 구성하는 데이터 1000개를 산점도로 표시(평균 0, 표준편차 1)

normal_x = np.arange(1000)
normal_y = np.random.randn(1000)
plt.plot(normal_x, normal_y, '*')
plt.show()

3. plt.axis(), plt.title()

# plt.axis([x축 최소, x축 최대, y축 최소, y축 최대])
plt.axis([0, 5, 0, 20]) 

plt.title('First Plt')

# plt.plot(x축, y축, 옵션)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro') 
plt.show()

4. plt.hist()

plt.hist(normal_y, bins = 100) # plt.hist(value, bins = 간격)
plt.show()

 

5. Import math, 삼각함수 그래프

import math
t = np.arange(0, 2.5, 0.05)
y1 = np.sin(math.pi*t)
y2 = np.sin(math.pi*t+math.pi/2)
y3 = np.sin(math.pi*t-math.pi/2)

plt.plot(t, y1, 'b*', t, y2, 'g*', t, y3, 'r*')
plt.show()

6. plt.subplot()

plt.subplot(311) # plt.subplot(3행 1열 1번째)
plt.plot(t, y1, 'b*')

plt.subplot(312) # plt.subplot(3행 1열 2번째)
plt.plot(t, y2, 'g*')

plt.subplot(313) # plt.subplot(3행 1열 3번째)
plt.plot(t, y3, 'r*')
plt.show()

예시) 정규분포(평균 0, 표준편차 3, 1000개)
- 2행 1열 1번째: 산포도
- 2행 1열 2번째: 히스토그램

y = np.random.normal(0, 3, 1000)

plt.subplot(211)
plt.plot(np.arange(1000), y, '*')

plt.subplot(212)
plt.hist(y, bins=100)

plt.show()

- 1행 1열 1번째: 산포도
- 1행 2열 2번째: 히스토그램

y = np.random.normal(0, 3, 1000)

plt.subplot(121)
plt.plot(np.arange(1000), y, '*')

plt.subplot(122)
plt.hist(y, bins=100)

plt.show()

7. plt.text()

plt.title('y = x^2')
plt.xlabel('x')
plt.ylabel('y')
plt.axis([0, 5, 0, 20]) # x축, y축 범위 지정

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'b*')

plt.text(1, 1, 'First')
plt.text(2, 4, 'Second')
plt.text(3, 9, 'Third')
plt.text(4, 16, 'Fourth')

plt.text(1.1, 12, r'$y = x^2$', fontsize=20, bbox= {'facecolor': 'green', 'alpha': 0.2})
# plt.text(x좌표, y좌표, 식, 스타일)
# alpha: 불투명도(1이 최대)
# facecolor: 배경색

plt.grid() # 격자선
plt.show()

예시) 무작위 정수(0~12) 12개를 추출하여 판매량으로 사용. 
- X축: 1~12월, Y축: 판매량
- 각 축에는 적절한 xlabel, ylabel을 지정하고 차트의 바탕에는 그리드가 표시
- 제목: '월별 판매량'
- 최고 판매량의 위치에는 텍스트를 추가하여 강조

# max값을 가지는 인덱스 리스트를 찾는 함수 정의
def max_value_index_list(array):
    result = []
    max_value = array.max()
    for i in range(len(array)):
        if array[i] == max_value:
            result.append(i)
    return result
x = np.arange(1, 13)
y = np.random.randint(0, 12, 12)

# 차트 제목
plt.title('Sales Rate per Month')

# 축 명칭
plt.xlabel('Month')
plt.ylabel('Sales Rate')

# 축 범위
plt.axis([0, 13, -1, 14])

# 최대값 표시
for i in max_value_index_list(y):
    plt.text(i, y[i], 'max')

# 격자선
plt.grid()
plt.xticks(np.arange(1, 13))

plt.plot(x, y, 'r*')

# 범례
plt.legend(['Sales Rate'])

plt.show()

# 저장
plt.savefig('Sales Rate per Month')

반응형

'프로그래밍' 카테고리의 다른 글

[Python] Matplotlib 활용(3)  (0) 2021.05.13
[Python] Matplotlib 활용(2)  (0) 2021.05.10
[Python] Data Aggregation  (0) 2021.05.09
[Python] Data Manipulation  (0) 2021.05.07
[Python] Pandas Library(Series)(2)  (0) 2021.05.06