Line Plots
s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
s.plot()
Series 데이터를 plot한 모습입니다.
df = pd.DataFrame(np.random.randn(10, 4).cumsum(0),
columns=['A', 'B', 'C', 'D'],
index=np.arange(0, 100, 10))
df.plot()
DataFrame을 그려넣은 모습입니다.
Bar Plots
fig, axes = plt.subplots(2, 1)
data = pd.Series(np.random.rand(16), index=list('abcdefghijklmnop'))
data.plot.bar(ax=axes[0], color='k', alpha=0.7)
data.plot.barh(ax=axes[1], color='k', alpha=0.7)
Series 데이터를 시각화한 모습입니다.
이때 bar은 수직으로, barh는 수평으로 그립니다.
시각화할 데이터 프레임은 다음과 같습니다.
df = pd.DataFrame(np.random.rand(6, 4),
index=['one', 'two', 'three', 'four', 'five', 'six'],
columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus'))
df
Genus A B C D
one 0.370670 0.602792 0.229159 0.486744
two 0.420082 0.571653 0.049024 0.880592
three 0.814568 0.277160 0.880316 0.431326
four 0.374020 0.899420 0.460304 0.100843
five 0.433270 0.125107 0.494675 0.961825
six 0.601648 0.478576 0.205690 0.560547
df.plot.bar()
인덱스를 x축으로 삼고, 각 Column에 맞게 그림을 그립니다.
df.plot.barh(stacked=True, alpha=0.5)
수평으로 그리고, stacked를 True로 하면 스택 형식으로 쌓습니다.
다른 데이터를 불러오겠습니다.
tips = pd.read_csv('examples/tips.csv')
party_counts = pd.crosstab(tips['day'], tips['size'])
party_counts
size 1 2 3 4 5 6
day
Fri 1 16 1 1 0 0
Sat 2 53 18 13 1 0
Sun 0 39 15 18 3 1
Thur 1 48 4 5 1 3
party_counts = party_counts.loc[:, 2:5]
party_pcts = party_counts.div(party_counts.sum(1), axis=0)
party_pcts
size 2 3 4 5
day
Fri 0.888889 0.055556 0.055556 0.000000
Sat 0.623529 0.211765 0.152941 0.011765
Sun 0.520000 0.200000 0.240000 0.040000
Thur 0.827586 0.068966 0.086207 0.017241
party_pcts.plot.bar()
이것도 인덱스를 기준으로 column을 표시하고 있네요
import seaborn as sns
tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])
tips.head()
total_bill tip smoker day time size tip_pct
0 16.99 1.01 No Sun Dinner 2 0.063204
1 10.34 1.66 No Sun Dinner 3 0.191244
2 21.01 3.50 No Sun Dinner 3 0.199886
3 23.68 3.31 No Sun Dinner 2 0.162494
4 24.59 3.61 No Sun Dinner 4 0.172069
sns.barplot(x='tip_pct', y='day', data=tips, orient='h')
sns.barplot(x='tip_pct', y='day', hue='time', data=tips, orient='h')
Histograms and Density Plots
plt.figure()
tips['tip_pct'].plot.hist(bins=50)
각 bin에 맞게 이산화된 값을 보여줍니다. 이때 빈도수를 나타냅니다.
plt.figure()
tips['tip_pct'].plot.density()
이때는 빈도수를 밀도 함수로 보여줍니다.
plt.figure()
comp1 = np.random.normal(0, 1, size=200)
comp2 = np.random.normal(10, 2, size=200)
values = pd.Series(np.concatenate([comp1, comp2]))
values
0 -0.449034
1 0.050441
2 -0.241866
3 -0.767633
4 1.398120
...
395 8.792639
396 9.359049
397 10.265267
398 7.358782
399 11.104848
Length: 400, dtype: float64
sns.distplot(values, bins=100, color='k')
두 개의 벡터를 연결하여 Series를 만든 후 출력한 모습입니다.
이때 Seaborn의 distplot을 통해 histograms와 밀도 함수를 그려줍니다.
Scatter or Point Plots
macro = pd.read_csv('examples/macrodata.csv')
data = macro[['cpi', 'm1', 'tbilrate', 'unemp']]
trans_data = np.log(data).diff().dropna()
trans_data[-5:]
cpi m1 tbilrate unemp
198 -0.007904 0.045361 -0.396881 0.105361
199 -0.021979 0.066753 -2.277267 0.139762
200 0.002340 0.010286 0.606136 0.160343
201 0.008419 0.037461 -0.200671 0.127339
202 0.008894 0.012202 -0.405465 0.042560
plt.figure()
sns.regplot('m1', 'unemp', data=trans_data)
plt.title('Changes in log %s versus log %s' % ('m1', 'unemp'))
serborn의 regplot을 사용함으로써, plot과 동시에 regression line을 그려줍니다.
sns.pairplot(trans_data, diag_kind='kde', plot_kws={'alpha': 0.2})
이를 통해 모든 산점도를 볼 수 있습니다.
Facet Grids and Categorical Data
sns.factorplot(x='day', y='tip_pct', hue='time', col='smoker',
kind='bar', data=tips[tips.tip_pct < 1])
x는 day, y는 tip_pct이고, 색깔은 time으로 나누었습니다. 마지막으로 col을 기준으로 나타냈네요
이처럼 seaborn의 factorplot은 여러 형태로 나타낼 수 있습니다.
sns.factorplot(x='day', y='tip_pct', row='time',
col='smoker',
kind='bar', data=tips[tips.tip_pct < 1])
row를 time으로 col을 smoker로 해서 총 4개가 나왔네요
sns.factorplot(x='tip_pct', y='day', kind='box',
data=tips[tips.tip_pct < 0.5])
이번에는 bar 형태가 아닌 box 형태로 나타냈습니다.
'Python Library > Matplotlib' 카테고리의 다른 글
[Matplotlib - Python] A Brief matplotlib API Primer (1) | 2022.06.16 |
---|---|
[Matplotlib - Python] Matplotlib 라이브러리와 파일 저장, 텍스트 처리, 여러 데이터 처리 (0) | 2022.02.09 |
[Matplotlib - Python] Matplotlib 라이브러리와 꺾은 선 그래프의 여러 설정들 (0) | 2022.02.09 |
[Matplotlib] Matplotlib 라이브러리 (0) | 2022.02.09 |