본문 바로가기
컴퓨터/Python

[pandas] 파이썬 판다스 - matplotlib pyplot 그래프 차트 그리기, 히스토그램, 스캐터플롯, ggplot 스타일 플롯 그리기, csv 파일 읽어 DataFrame에 넣기, x축, y축, 제목 설정하기

by HanJoohyun 2018. 6. 6.
반응형

 

 


안녕하세요 한주현 입니다

여러분들 잘 지내시나요? 
저는 요새 python에서 table처럼 데이터를 다뤄주고 그래프도 잘 그려주는
pandas의 매력에 빠져있습니다 ㅎㅎ

오늘은 matplotlib 과 pandas로 ggplot 스타일의 플롯을 그려보겠습니다.




목차


1. matplotlib pyplot 그리기


2. matplotlib pyplot 히스토그램 그리기


3. matplotlib pyplot 스캐터플롯 그리기


4. matplotlib 스타일 설정하기


5. Pandas로 txt 파일 DataFrame 으로 읽어 barplot 그리고 ggplot 스타일로 지정해보기 - Triple Negative Breast Cancer 예제





준비물


- 파이썬 판다스

https://pandas.pydata.org/


- 파이썬 numpy

- Jupyter Notebook (필수는 아님)




1. matplotlib pyplot 그리기


matplotlib 의 pyplot 을 import 해주시고


figure 메서드를 호출하여 fig 변수에 넣습니다


그다음 fig 변수에서 add_subplot 메서드로 sub plot 을 생성해줍니다


괄호에 들어가는 값은 (row 수, column 수, fig 번호 지정) 입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
## Matplotlib pyplot 그리기
# subplot 생성
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
 
fig = plt.figure()
 
ax = fig.add_subplot(1,1,1)
 
cs



하나의 sub plot 을 생성하였습니다 ㅎㅎ



이번에는 선을 하나 그려볼까요?


plot 메서드로 플롯을 그리며 'k--' 로 검은 점선을 그렸습니다.


k 는 검은 색이며 -- 작대기ㅋㅋ 두 개는  점선을 나타냅니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## Matplotlib pyplot 그리기
# plot 그리기 - 점선
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
 
fig = plt.figure()
 
ax = fig.add_subplot(1,1,1)
ax.plot(randn(50).cumsum(),'k--'## plot 메서드로 figure 그림, k-- 는 점선
 
cs




너무 신기신기 ㅋㅋ



이번에는 점선 말고 실선으로 진행해보겠습니다.


k-- 작대기 두개를 작대기 하나로!!  k- 로 하면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## Matplotlib pyplot 그리기
# plot 그리기 - 스타일 바꾸기 - 실선
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
 
fig = plt.figure()
 
ax = fig.add_subplot(1,1,1)
ax.plot(randn(50).cumsum(),'k-'## plot 메서드로 figure 그림, k- 는 실선
#ax.plot(randn(50).cumsum(),'k') ## plot 메서드로 figure 그림, k 도 실선
 
cs


실선으로 만들었습니다 ㅎㅎ





이번에는 여러 서브플롯을 그리면서 플롯의 스타일도 설정해보겠습니다


add_subplot 메서드에 (row 개수, column 개수, 편집할 플롯 번호) 를 넣어주심 됩니다.


k 는 black 의 k ... ㄷㄷㄷ

r 은 red 의 r

g 는 green 의 g

b는  blue 의 b ㅎㅎㅎ


RGB 값을 넣으셔도 됩니다

(0.1, 0.2, 0.5) 또는 (0.1, 0.2, 0.5, 0.3) 으로  A 값도 넣어주실 수 있습니다. (alpha, 투명도 ㅎㅎ)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## Matplotlib pyplot 그리기
# plot 그리기 - 스타일 바꾸기 - 색깔
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
 
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.plot(randn(50).cumsum(),'k'## k는 black
ax2.plot(randn(50).cumsum(),'r-'## r는 red
ax3.plot(randn(50).cumsum(),'g--'## g는 green
ax4.plot(randn(50).cumsum(),'b'## b는 blue
 
cs




짜잔,, 멋지네요






2. matplotlib pyplot 히스토그램 그리기

이번에는 pyplot 으로 히스토그램을 그려보겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## Matplotlib pyplot 그리기
# 히스토그램 그리기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
 
fig = plt.figure()
 
ax = fig.add_subplot(1,1,1)
ax.hist(randn(100), bins=20, color='k', alpha=0.3)
 
# ax.hist 메서드로 히스토그램을 그림
# matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, \
#                        cumulative=False, bottom=None, histtype='bar', align='mid', \
#                        orientation='vertical', rwidth=None, log=False, color=None, \
#                        label=None, stacked=False, normed=None, hold=None, data=None, **kwargs)
 
# bin의 개수 지정
# color 색깔
# alpha 투명도 지정
# 다른 argument에 대한 자세한 내용은 아래 링크 참조
# https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist 
# https://matplotlib.org/api/pyplot_summary.html
cs






3. matplotlib pyplot 스캐터플롯 그리기

이번에는 pyplot 으로 스캐터플롯을 그려보겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## Matplotlib pyplot 그리기
# 스캐터 플롯 그리기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
import numpy as np
 
fig = plt.figure()
 
ax = fig.add_subplot(1,1,1)
ax.scatter(np.arange(40), np.arange(40+ 3 * randn(40))
 
# ax.scatter 메서드로 스캐터 플롯을 그림
# matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, \
#                          cmap=None, norm=None, vmin=None, vmax=None, \
#                          alpha=None, linewidths=None, verts=None, \
#                          edgecolors=None, hold=None, data=None, **kwargs)
 
# 다른 argument에 대한 자세한 내용은 아래 링크 참조
# https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter
# https://matplotlib.org/api/pyplot_summary.html
 
cs




4. matplotlib 스타일 설정하기

이번에는 matplotlib 의 스타일을 설정해보겠습니다

한 번에 여러 플롯을 보면서 설정의 바뀜에 따라 어떻게 바뀌는지 봐주세요 ㅎㅎ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
## Matplotlib pyplot 그리기
# 플롯 스타일 지정하기 - 선 스타일, 색깔, 마커
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## numpy random를 import
from numpy.random import randn
import numpy as np
 
fig = plt.figure()
fig.set_size_inches(18.510.5)
 
ax1 = fig.add_subplot(3,2,1)
ax2 = fig.add_subplot(3,2,2)
ax3 = fig.add_subplot(3,2,3)
ax4 = fig.add_subplot(3,2,4)
ax5 = fig.add_subplot(3,2,5)
ax6 = fig.add_subplot(3,2,6)
 
ax1.plot(randn(30).cumsum(), 'k--')   ## 그냥 점선
ax2.plot(randn(30).cumsum(), 'ko--')  ## 점선 + 마커
ax3.plot(randn(30).cumsum(), 'yo-', markeredgecolor='r')  ## 점선 + 마커 테두리색
ax4.plot(randn(30).cumsum(), 'ko-', markerfacecolor='y')  ## 점선 + 마커 내부색
ax5.plot(randn(30).cumsum(), label='Default')  ## 기본 plot
ax6.plot(randn(30).cumsum(), drawstyle='steps-post', label='steps-post'## 계단식 plot
 
cs





5. Pandas로 txt 파일 DataFrame 으로 읽어 barplot 그리고 ggplot 스타일로 지정해보기 - Triple Negative Breast Cancer 예제

마지막으로 txt 파일을 읽어 DataFrame 으로 넣고,

DataFrame 에서 barplot을 그린 다음 ggplot 스타일로 지정해보겠습니다


그래도 나름 생물정보학 블로그이니 생물정보학적인 내용을 넣고 싶어서 ㅎㅎ.. Triple Negative Breast Cancer 의 gene expression 예제를 만들어봤습니다.

Data는 제가 그냥 만들어 보았습니다 이상한점이 있더라도 너그럽게 봐주세요 ㅎㅎ

Triple Negative Breast Cancer 란?
치료가 어려운 Triple Negative Breast Cancer는 유방암 환자의 약 10-20% 정도의 비율을 나타내고 있습니다.
Estrogen Receptor(ER), Progesterone receptor(PR), Her2의 발현이 되지 않습니다.
암조직의 생검(Biopsy)을 통해 진단을 하며, 호르몬 수용체가 발현되지 않으므로 화학치료가 잘 듣지 않기에 복합적 치료인
수술, 방사선요법, 화학적요법을 함께 진행합니다.

실습용 파일 - GeneExpression.txt
Gene,KSM_Normal,KSM_Tumor,KYJ_Normal,KYJ_Tumor
ESR1,8.06,0.14,7.62,7.73
ESR2,5.03,0.06,9.02,7.04
PGR,6.13,0.21,5.12,2.08
ERBB2,4.8,0.01,4.98,4.78


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## Pandas와 Matplotlib pyplot 으로 차트 그리기
# csv 파일 읽어 DataFrame에 넣기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## pandas import 하기
import pandas as pd
from pandas import DataFrame
 
## comma로 구분된 파일을 읽어 pandas DataFrame 객체에 넣기
df = DataFrame.from_csv("GeneExpression.txt",sep=",")
print(df)
 
cs

Pandas 로 txt 를 읽어 DataFrame 을 출력해보았습니다
깔끔하게 테이블 형태로 출력되네요 ㅎㅎ



이제 이 DataFrame 으로 barplot 을 그려보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## Pandas와 Matplotlib pyplot 으로 차트 그리기
# DataFrame을 barplot으로 그리기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## pandas import 하기
import pandas as pd
from pandas import DataFrame
 
## comma로 구분된 파일을 읽어 pandas DataFrame 객체에 넣기
df = DataFrame.from_csv("GeneExpression.txt",sep=",")
 
## barplot 그리기
ax = df.plot(kind='bar')
 
cs


 ㅎㅎ


근데 차트의 제목이나 축에 대한 설명이 없네요 .. 넣어보겠습니다 ㅎㅎ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
## Pandas와 Matplotlib pyplot 으로 차트 그리기
# title, x축 라벨, y축 라벨, 레전드 위치 설정하기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## pandas import 하기
import pandas as pd
from pandas import DataFrame
 
## comma로 구분된 파일을 읽어 pandas DataFrame 객체에 넣기
df = DataFrame.from_csv("GeneExpression.txt",sep=",")
 
## barplot 그리기
ax = df.plot(kind='bar')
 
## title 넣기
ax.set_title("Gene Expression", fontsize=20)
 
## x축 label 수정하기
ax.set_xlabel("Triple negative genes")
 
 
## y축 label 수정하기
ax.set_ylabel("FPKM")
 
## legend 위치 조정
ax.legend(loc='best')
 
cs





마지막으로 ggplot 스타일로 바꿔보겠습니다 !!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
## Pandas와 Matplotlib pyplot 으로 차트 그리기
# 플롯 스타일 바꿔보기
 
## Jupyter Notebook의 Magic command로  notebook 내에서 figure를 볼 수 있게 해줌
%matplotlib inline 
 
## matplotlib의 pyplot import
import matplotlib.pyplot as plt
## pandas import 하기
import pandas as pd
from pandas import DataFrame
 
## ggplot style로 바꾸기
plt.style.use('ggplot')
 
## comma로 구분된 파일을 읽어 pandas DataFrame 객체에 넣기
df = DataFrame.from_csv("GeneExpression.txt",sep=",")
 
## barplot 그리기
ax = df.plot(kind='bar')
 
## title 넣기
ax.set_title("Gene Expression", fontsize=20)
 
## x축 label 수정하기
ax.set_xlabel("Triple negative genes")
 
 
## y축 label 수정하기
ax.set_ylabel("FPKM")
 
## legend 위치 조정
ax.legend(loc='best')
 
cs









오늘은 파이썬 판다스와 matplotlib pyplot 으로 플롯 그리는 방법에 대해 알아보았습니다

여러분들께 도움이 되셨음 좋겠네요 ㅎㅎ


출처: 
matplotlib document

pandas visualization


paypal 기부 버튼을 만들었습니다
여러분들의 작은 정성이 저에게 큰 힘이 됩니다
기부해주신 분들을 기억하며
더 좋은 내용으로 보답해 드리겠습니다 :)

Donate 버튼은 paypal 결제로 paypal 계정이 없으시더라도
카드로도 기부 가능하십니다 :)
Use your credit card or bank account (where available). 옆의 continue 를 누르시면 됩니다

한주현 드림







반응형

댓글