**본 내용은 Alice 의 데이터 분석을 위한 라이브러리 과정을 수강하면서 , 직접 궁금한 것을 찾아보고 공부하며 정리한 내용임.
Matplotlib
메트플랏 라이브러리란 데이터 시각화 그래프 패키지임
- 파이썬에서 자료를 차트(chart)나 플롯(plot)으로 시각화하는 패키지
- .plot() 함수와 .show() 함수를 활용
- 라인 플롯, 바 차트, 파이차트, 히스토그램, Box Plot, Scatter Plot 등을 비롯하여 다양한 차트와 플롯 스타일을 지원
- Matplotlib.org 갤러리 웹페이지에서 다양한 샘플 차트 참고
*matplotlib에서 pyplot으로 그래프를 그릴때, 기본 폰트는 한글 지원안함.
이때 사용할 코드
import matplotlib.font_manager as fm
fname='./NanumBarunGothic.ttf'
font = fm.FontProperties(fname = fname).get_name()
plt.rcParams["font.family"] = font
**참고! 위에서 폰트 설정에 rcParam 속성이 쓰였는데, 벡엔드에서 Runtime 생성시 그려줄 속성을 바꿀수 있다.
이는 아래에서 다루는 내용들은 plot함수에서 style 설정해준것과 다르다.
정리하자면, 파이썬 설정에는 총 두가지 방법이 있음.
- 1. rc parameter 설정으로 이후의 그림 전체에 적용 (백엔드, 동적)
- 2. 인수를 사용하여 개별 텍스트 관련 명령에만 적용 (함수내 인수로 동작)
rcParam 의 구조 참고사이트
https://jrc-park.tistory.com/274
matplotlib 전체 자세히 보려면 ebook
(이 포스팅은 빠른습득 + 요약버젼이라..좀더 자세한정보 얻으려면 아래 ebook 링크 클릭 )
https://datascienceschool.net/01%20python/05.01%20%EC%8B%9C%EA%B0%81%ED%99%94%20%ED%8C%A8%ED%82%A4%EC%A7%80%20%EB%A7%B7%ED%94%8C%EB%A1%AF%EB%A6%AC%EB%B8%8C%20%EC%86%8C%EA%B0%9C.html
아래에서 총 3개 다룰예정
1. Line Plot
2. Bar Plot
3. Histogram
plt.subplots 함수 사용
fig, axes = plt.subplots(1, 2, figsize=(8, 4)) #몇행 , 몇열, 위치
#하나의 도화지에 1*2의 모양으로 그래프. 그래프를 2개 그리고, 가로로 배치.
# fig 는 도화지(figure).
# ax 는 그려질 그래프, 변수(axes).
# plot 하나를 subplot 이라 함.
#마지막 정리를 할떄 tight_layout()함수를 함께 사용하면,subplot으로 자동으로 레이아웃을 맞춰줌.
공통
속성(linestyle, marker, color) 값
Line Styles
기호의미
- | 실선 |
– | 대시 선 |
-. | 대시 점 선 |
: | 점선 |
Markers
기호의미
. | 점 | , | 픽셀 |
o | 원 | s | 사각형 |
v, <, ^, > | 삼각형 | 1, 2, 3, 4 | 삼각선 |
p | 오각형 | H, h | 육각형 |
1. Line plot
fig, ax = pl.subplots() #1ro
x=np.arange(15) #0~14
y=x**2. #x의 제곱 , x의 세제곱을 표현하고 싶으면 ***3
ax.plot(
x,y
linestyle=":",
maker="*"
color="#524FA1" #rbg 16진수
)
## x축이 0~14까지의 수이고 y의 춝이 x의 2제곱인 선그래프가 그려짐.
- Line plot
x= np.arage(10)
fig, ax = plt.subplots()
#solid ()
ax.plot(x, x, linestylee="-")
#dashed
ax.plot(x, x+2, linestyelee="--") # x값이 1씩 커질떄 y축은 2씩 커짐. 위의 solid 그래프와 2의 간격을 두고, -- 형태로 그림.
#dashdot
ax.plot(x, x+4, linestyle="-.") # dashed그래프에서 2만큼 위에 그래프를 그림. 선의 형태는 -. 그림.
#dotted
ax.plot(x, x+6, linestyle=":") # dashdot그랠프와 2만큼 위에 그려짐. 선의 형태는 : 인데, 이때 : 은 누운모양 . . . . 처럼.
Color
컬러를 쓰는 방법은 다양하다.
ax.plot(x, x, color="r") #red 의 약자
ax.plot(x, x+2, color="green") #정확한 색깔명칭
ax.plot(x, x+4, color="0.8") #gray scale이 0~1로 표현됨.
ax.plot(x, x+6, color="#C4C4C4") #웹 컬러코드
Marker
선그래프에서 x값에 해당하는 곳마다 marker 표시를 할 수 있음.
ax.plot(x, x maker=".") #dot 으로 표시
ax.plot(x, x maker="o") #dot 보다 큰 동그라미 표시
ax.plot(x, x maker="v") #화살표로 표시됨
ax.plot(x, x maker="s") #square 네모 모양으로 표시됨
ax.plot(x, x maker="*") #기호처럼 *별모양 그대로표시됨
축 경계 조정방법
x=np.linespace(0,10,1000) #start, end, step 포인트 / 0부터 10까지 그래프를 그리며
fig, ax=plt.subplots()
ax.plot(x, np.sin(x)) # numpylib 에서는 수학계산 이용. sin(x)그래프 쓸수있음 , x값이 많을 수록 본래의 곡선형이됨.
#축세팅
ax.set_xlim(-2,12) #lim은 limit
ax.set_ylim(-1.5,1.5 )
## 기초수학--
#삼각함수 sin,cos,tan/ sin(x)은 1,1 구간내 반환/ 누운s 형태 그래프.
#sin 계산이 안떠오른다면.. (고>중>초등수준 설명)
#반지름 1기준, 180도 = 1 π 라디안
# sin(x) 함수의 1주기가 0~2π
# y = sin(x)
# plot 1번에 그래프 1
# 삼각함수를 토대로 x값이 0~2파이까지 네번의 반원을 돌면 한번의 주기를 완료!
# x는 라디안, x형태가 적으면 각진 형태의 sin그래프, x값이 많을 수록 본래의 곡선형이됨.

https://cosmosproject.tistory.com/253
https://rasino.tistory.com/232
https://ko.khanacademy.org/math/cc-seventh-grade-math/cc-7th-geometry/cc-7th-area-circumference/a/radius-diameter-circumference
https://ko.khanacademy.org/math/cc-seventh-grade-math/cc-7th-geometry/cc-7th-area-circumference/a/radius-diameter-circumference
https://m.blog.naver.com/incoinco/221780288173
#y=tan(x)의 그래프는 여기 https://ko.khanacademy.org/math/trigonometry/unit-circle-trig-func/graphs-of-sine-cosine-tangent/v/tangent-graph
범례 (legend)
하나의 그래프에 여러 데이터를 한 번에 그리는 경우,
각 데이터의 정보를 그래프에 함께 띄워 주는 정보박스.
- ax.legend()함수
loc (자주 사용되는 위치 옵션)
문자형 | code | 문자형 | code |
‘best’ | 0 | ‘center left’ | 6 |
‘upper right’ | 1 | ‘center right’ | 7 |
‘upper left’ | 2 | ‘lower center’ | 8 |
‘lower left’ | 3 | ‘upper center’ | 9 |
‘lower right’ | 4 | ‘center’ | 10 |
‘right’ | 5 | - | - |
x.np.arange(10)
fig, ax= plt.subplots()
ax.plot(x, x, label='y=x') # x와 y가 같다. labe은 범례를 그린 박스.
ax.plot(x, x**2, label='y=x^2') # y는 x의 제곱이다.
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend(loc='upper right' #패드의 location 위치
shadow = True, #패드의 그림자
fancybox = True, #패드박스의 모서리를 둥글게
borderpad = 2 #범례를 그린 하얀색 네모(패드)의 크기
)
2. Bar plot
axes[0]은 막대 그래프, axes[1]은 히스토그램
bar그래프
Bar그래프(막대형 차트)는 여러 값을 비교하는데 적합
x=np.arage(10) #0~9범위
fig, ax=plt.subplots(figsize=(12,4)) #가로가 12가 높이4인 그래프.
ax.bar(x, x*2) #바그래프의 간격을 x와 y로(y는 x의 2배)
x = np.random.rand(3) # x의 바를 3개 만들자
y = np.random.rand(3)
z = np.random.rand(3)
data = [x,y,z]
fig, ax=plt.subplots()
x_ax=np.arange(3)
for i in x_ax:
ax.bar x_ax, data[i]
bottom=np.sum(data[ : i], axis=0) #세개의 그래프를 합칠때 아래서부터 순서대로 쌓아올림 axis 0 기준으로 세로로..
ax. set_xticks(x_ax)
ax.set_xticklabels(["A","B","C"]) 각 그래프 label.
3. Histogram 도수 분포표
Histogram은 일정 시간 동안의 숫자 데이터 분포를 시각화 하는데 적합
fig, ax= plt.subplots() # figure , ax 는 plot은 subplots
data=np.random.randn(1000) #1000개의 data 값
ax.hist(data, bins=50) #데이터를 넣고, 50개의 막대로 나타냄.
Matplotlib with pandas
예제 1 )
df = pd.read_csv("./president_heights.csv") #데이터 불러오기
fig, ax = plt.subplots()
ax.plot(df["order"], df["height(cm)"], label="height") #x값에 가져올 데이터, y값에 가져올데이터
ax.set_xlabel("order") #x값에 이름세팅
ax.set_ylabel("height(cm)") #y값에 이름 세팅
예제 2)
df = pd.read_csv("./data/pokemon.csv") #데이터 불러오기
fire = df[(df['Type 1']=='Fire') | ((df['Type 2'])=="Fire")] #둘중 하나라도 가지고 있으면 fire다.
water = df[(df['Type 1']=='Water') | ((df['Type 2'])=="Water")] #주의할점! 데이터의 이름! Type 과 1 사이의 띄어쓰기, 대문자
fig, ax = plt.subplots()
ax.scatter(fire['Attack'], fire['Defense’], color='R', label='Fire', marker="*", s=50) #공격x 값, 방어y값, size는 marker크기
ax.scatter(water['Attack'], water['Defense’], color='B', label="Water", s=25) #대소문자 잘보기
ax.set_xlabel("Attack")
ax.set_ylabel("Defense")
ax.legend(loc="upper right")
'ML 인공지능' 카테고리의 다른 글
데이터 활용 아르바이트 (0) | 2021.11.14 |
---|---|
[Python] 파이썬을 이용한 공공 데이터 분석 및 활용(1) (0) | 2021.11.11 |
[Python] 데이터분석을 위한 라이브러리 Numpy, Pandas 전체 요약 (0) | 2021.11.09 |
[DL] 자격증 (0) | 2021.08.08 |
[AI] 데이터 분석 기본과정_ 라이브러리 (numpy, pandas, matplotlib) (0) | 2021.08.07 |
댓글