본문 바로가기
Python

[Python] Pandas DataFrame

by YJHTPII 2023. 7. 21.
반응형

 

 

https://wikidocs.net/159927

 

20-01 plotting기초 (plot)

####DataFrame.plot(args, kwargs) ##개요 `plot` 메서드는 matplotlib 라이브러리를 이용해 dataframe 객체를 시각화 하는 메서드 입니…

wikidocs.net

 

 

 

20-01 plotting기초 (plot)

DataFrame.plot(args, kwargs)

개요

plot 메서드는 matplotlib 라이브러리를 이용해 dataframe 객체를 시각화 하는 메서드 입니다.
DataFrame.plot이 아닌 matplotlib 라이브러리의 사용법은 matplotlib 홈페이지를 참고 바랍니다.
※ matplotlib에 대한 기본적인 지식이 있을경우 보다 이해가 쉽습니다.

사용법

기본 사용법
※ 자세한 내용은 아래 예시를 참고 바랍니다.
df.plot(args, kwargs)
kind : 플로팅할 유형입니다. 목록은 아래와 같습니다.
※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin} x / y : 각 축으로 설정할 값(컬럼명) 입니다.
ax : 현재 figure의 axes 입니다. (fig와 axes의 개념은 아래 링크 참고)
 링크
subplot : 각 열들을 별개의 서브차트로 플로팅할지의 여부입니다.
sharex / sharey : subplot=True 인 경우 각축의 눈금을 공유할지 여부 입니다.
layout : 튜플로 입력하는 subplot의 배열입니다.
figsize : 출력할 fig의 크기 입니다.
use_index : 인덱스를 x축의 눈금으로 사용할지 여부 입니다.
title : fig의 제목 입니다.
grid : 배경 격자의 형성 여부입니다.
legend : subplot에서의 범례 배치 입니다.
style : 선의 스타일 입니다. 자세한것은 링크 참고 바랍니다.
logx / logy / loglog : 각 축에 대해 로그 스케일을 적용할지 여부 입니다. loglog=True인 경우 두 축에 모두 적용합니다.
xticks / yticks : 각 축의 눈금 값을 지정합니다.
xlim / ylim : 각 축의 값의 경계를 지정합니다.
xlabel / ylabel : 각 축의 라벨을 지정합니다.
rot : 눈금값의 기울기 입니다. 눈금값이 많을경우 유용합니다.
fontsize : 눈금값의 크기 입니다.
colormap / colorbar : 각 값에 대해 matplolib 에서 지원하는 colormap을 적용할 수 있습니다.
table : True면 데이터를 테이블로 출력하며 matplotlib의 기본 레이아웃에 맞게 전치됩니다.
yerr / xerr : 특정 열의 값을 이용하여 오차범위 표현을 할 수 있습니다.
stacked : bar plot이나 barh plot의 경우 막대 그래프를 누적 막대그래프로 표현할 수 있습니다.
sort_columns : 열을 정렬하여 플랏할지 여부입니다.
secondary_y : 보조축 레이블을 출력할지 여부 입니다.
mark_right : 보조축 레이블을 출력할 경우 범례에 "(right)"으로 열 레이블을 표시할지 여부 입니다.
include_bool : bool형식의 값을 플랏할지 여부입니다.
backend : plotting.backend 옵션에 지정된 백엔드 대신 사용할 백엔드. 예를 들어, 'matplotlib'. 또는 전체 세션에 대해 plotting.backend를 지정하려면 pd.options.plotting.backend를 설정할 수 있습니다.

예시

먼저 기본적인 사용법 예시를위하여 두가지 데이터를 만들어 보겠습니다.
df는 0~100까지의 x축 값을 갖는 sin 값 tan 값의 데이터 입니다.

val = np.linspace(0,100,101)
sin = np.sin(np.pi/25*val)
tan = np.tan(np.pi/25*val)
df = pd.DataFrame(data={'val':val,'sin':sin,'tan':tan})
>>
       val           sin           tan
0      0.0  0.000000e+00  0.000000e+00
1      1.0  1.253332e-01  1.263294e-01
2      2.0  2.486899e-01  2.567564e-01
3      3.0  3.681246e-01  3.959280e-01
4      4.0  4.817537e-01  5.497547e-01
..     ...           ...           ...
96    96.0 -4.817537e-01 -5.497547e-01
97    97.0 -3.681246e-01 -3.959280e-01
98    98.0 -2.486899e-01 -2.567564e-01
99    99.0 -1.253332e-01 -1.263294e-01
100  100.0  1.286498e-15  1.286498e-15

df2는 df에서 sin, tan값만 추려낸 데이터 입니다.

df2 = df.loc[:,['sin','tan']]

 

 

기본적인 사용법
기본 적인 사용법은 df.plot() 형태 입니다. line 형태로 모든 열을 plot하게 됩니다.

df2.plot()
plt.show()


sin그래프, tan그래프가 출력된 것을 확인할 수 있습니다.


kind, x, y 인수의 사용
kind인수를 통해 원하는 형태의 그래프를 출력 할 수 있으며, x와 y로 해당 그래프의 x와 y를 지정할 수 있습니다.
※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin}

df.plot(kind='line', x='val', y='sin')
plt.show()


x축의 값은 0~100, y축의 값은 sin값으로 line 을 plot한 것을 확인할 수 있습니다.


ax 인수의 사용
ax인수를 통해 현재 axes값을 별도의 값으로 지정하여 plot에 사용할 수 있습니다.

fig, ax=plt.subplots(2) # 두개의 서브플롯에 ax를 배치하도록 fig를 설정
df.plot(kind='line', x='val', y='sin', ax=ax[0]) # sin그래프를 ax[0]으로 지정
df.plot(kind='line', x='val', y='tan', ax=ax[1]) # tan 그래프를 ax[1]으로 지정
plt.show()


각각의 ax로 구분한 Axes를 2칸짜리 subplot에 배열하여 plot한것을 확인 할 수 있습니다.


subplots 인수의 사용
subplots인수를 사용할 경우 각각의 열을 별도의 axes로 하여 subplot를 생성합니다.
※ 위 ax인수의 예시처럼 fig를 별도의 subplot 개체로 지정할 필요가 없습니다.

df2.plot(subplots=True)
plt.show()


각각의 열이 별도의 subplot에 할당된 것을 확인할 수 있습니다.


sharex / sharey 인수의 사용
subplot을 이용할 경우 두 Axes의 x축이나 y축값을 맞출 수 있습니다.
이때 공유된 축의 경우 한쪽은 보이지 않게 됩니다.
sharex의 기본값은 True로 x축은 맞추게 되고, sharey의 기본값은 False로 y축은 별도로 출력하는것이 기본입니다.

df2.plot(subplots=True, sharex=False, sharey=True) # x축값을 별도로 출력하고 y축값을 공유하도록 변경
plt.show()


x축값이 각각 그래프에 별도로 출력되는것을 확인 할 수 있습니다.
※subplot이 세로로 배열되어있기 때문에, shary=True인데 각각 출력이 됩니다. 가로로 배열되어있는상태라면 출력되지 않습니다.


layout인수의 사용
layout인수를 이용하여 subplot의 배열을 설정할 수 있습니다. 튜플 형태로 값을 입력합니다.

df2.plot(subplots=True, layout=(2,2))
plt.show()


fig가 2x2짜리 subplot으로 설정된 것을 확인할 수 있습니다.


figsize인수의 사용
figsize 인수를 이용해서 figure의 크기를 지정할 수 있습니다. 단위는 inch입니다.

df2.plot(figsize=(10,4))
plt.show()


fig의 크기가 변경된 것을 확인할 수 있습니다.


title / grid 인수의 사용
title인수는 figure의 제목을 설정하고, grid인수는 격자 출력 여부를 설정할 수 있습니다.

df2.plot(title="Pandas plot method", grid=True)
plt.show()


제목이 "Pandas plot method"로 설정되고, 격자가 설정된 것을 확인할 수 있습니다.


linestyle 인수의 사용
linestyle 인수를 지정하여 출력되는 그래프의 선 스타일을 지정할 수 있습니다.
선의 종류에 대해서는 matplotlib 홈페이지 참고 바랍니다.

df2.plot(linestyle='dashed')
plt.show()


선의 종류가 "- -" 형태인 'dashed'로 바뀐것을 확인 할 수 있습니다.


logx / logy / loglog인수의 사용
logs / logy / loglog인수를 이용해 각 축의 표시형식을 log스케일로 변경할 수 있습니다.
loglog인수는 모든 축의 값을 로그스케일로 변경합니다.

df2.plot(logx=True,logy=True) # df2.plot(loglog=True)
plt.show()


각 축의 표기형태가 로그 스케일로 변경된 것을 확인할 수 있습니다.


xticks / yticks 인수의 사용
xticks / yticks 인수에 리스트 형태의 값을 입력하여 특정 눈금의 값을 출력할 수 있습니다.

df.plot(kind='line', x='val',y='sin', xticks=[0,50,100],yticks=[0,0.5,1])
plt.show()


x축의 눈금이 0, 50, 100 만 y축의 눈금이 0, 0.5, 1 만 표시된 것을 확인할 수 있습니다.


xlim / ylim 인수의 사용
xlim / ylim 인수를 사용해 그래프의 출력 범위를 지정할 수 있습니다.

df.plot(kind='line', x='val',y='sin', xlim=[30,80],ylim=[0.25,0.75])
plt.show()


그래프가 x축으로는 30~80의 범위가, y 축으로는 0.25~0.75의 범위가 출력 된 것을 확인할 수 있습니다.


xlabel / ylabel 인수의 사용
xlabel / ylabel 인수를 사용해 각 축의 라벨을 출력할 수 있습니다.

df2.plot(xlabel='Width',ylabel='Height')
plt.show()


각 축의 이름이 출력 된 것을 확인할 수 있습니다.


rot / fontsize 인수의 사용
rot 인수를 이용해 눈금값의 기울기를 지정할 수 있고, fontsize 인수를 통해 눈금값의 크기를 지정할 수 있습니다.

df2.plot(rot=45,fontsize=20)
plt.show()


그래프 눈금값의 기울기가 45도로, 눈금값의 크기가 20으로 변경된 것을 확인할 수 있습니다.


colormap / colorbar 인수의 사용
colormap 은 출력되는 그래프의 값을 특정 색 범위로 표현하는 matplotlib의 기능입니다. colorbar는 색에 해당하는 값의 범위를 막대 형태로 출력하는 기능입니다.
colorbar의 기본값은 True이기 때문에, False로 지정해주어야 출력이 안됩니다.
colorbar를 적용하기 위해서는, 각 값에 대해서 색을 지정해 주어야합니다. c인수에 색의 값을 지정하는 열을 입력하여 가능합니다.
colormap의 종류에 대해서는 matplolib 에서 지원하는 colormap 링크을 참고 바랍니다.

data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}
df3 = pd.DataFrame(data)
df3.plot(kind='scatter',x='x_value',y='y_value',c='color_bar', colormap='cool',colorbar=True) # c인수로 color_bar 열을 지정.
plt.show()


c='color_bar'를 통해 색범위를 0~4로 정해주었고, 각 y값에 대해서 색값을 지정해주었습니다.
그에 맞게 colormap과 colorbar가 적용된 것을 확인할 수 있습니다.


position 인수의 사용
position인수는 막대그래프 'bar / barh'에대해서 막대의 위치가 눈금의 위치 {좌측(0), 중(0.5), 우측(1)}를 지정할 수 있습니다.

data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}
df3 = pd.DataFrame(data)
fig, ax=plt.subplots(3) # 3칸짜리 subplot을 갖는 fig 개체 설정
df3.plot(kind='bar',x='x_value',y='y_value',position=0,ax=ax[0])
df3.plot(kind='bar',x='x_value',y='y_value',position=0.5,ax=ax[1])
df3.plot(kind='bar',x='x_value',y='y_value',position=1,ax=ax[2]) 
plt.show()


각각 그래프에서 눈금의 위치와 막대 그래프의 위치를 비교해보면 position인수가 어떻게 적용되는지 확인할 수 있습니다.


xerr / yerr인수의 사용
xerr / yerr인수는 특정 축을 기존그래프의 오차범위로 설정하는 인수 입니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
fig, ax=plt.subplots(2)
df4.plot(kind='bar',x='x_value',y='y_value',yerr='err',ax=ax[0])
df4.plot(kind='barh',x='x_value',y='y_value',xerr='err',ax=ax[1])
plt.show()


기존 x_value / y_value 막대그래프에 대해서 작은 선 형태로 err 열이 오차범위로써 덧 씌워진 것을 확인할 수 있습니다.


stacked 인수의 사용
막대그래프의 경우 값이 여러개라면 stacked인수를 통해 누적 막대그래프의 형태로 변환이 가능합니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
df4.plot(kind='bar',x='x_value',y=['y_value','err'],stacked=True)
plt.show()


y의 값을 리스트 형태로 두 컬럼을 입력하여 두 막대그래프를 출력하도록 한 다음 stacked=True로 하여 누적 막대그래프가 된 것을 확인할 수 있습니다.


secondary_y 인수의 사용
두 그래프를 출력 할 경우 한 Axes를 다른 Axes에 종속시킴으로서 종속된 Axes를 secondary_y 인수를 이용해 보조 축으로 표현할 수 있습니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
ax1 = df4.plot(x='x_value',y='y_value',color='Red',) # y_value를 ax1로 
ax2 = df4.plot(x='x_value',y='err',ax=ax1,secondary_y=True) # err을 ax2로하여 ax1에 종속 및 보조축 설정
ax1.set_ylabel('y_value') # 라벨 설정
ax2.set_ylabel('err')


ax1를 생성하고 ax2를 ax1에 종속시키면서 secondary_y=True로 하여 우측에 보조축이 생성된 것을 확인할 수 있습니다.

반응형

댓글