この記事はかめ(@usdatascientist)さんのブログ(https://datawokagaku.com/python_for_ds_summary/) に書かれているmatplotlibの基本操作を実際にJupyter Labを用いてコーディングしてみた、という記事です。
matplotlibの基本操作まとめ
第20回
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(-3, 3, 10)
y = np.exp(x)
print(x)
print(y)
[-3. -2.33333333 -1.66666667 -1. -0.33333333 0.33333333
1. 1.66666667 2.33333333 3. ]
[ 0.04978707 0.09697197 0.1888756 0.36787944 0.71653131 1.39561243
2.71828183 5.29449005 10.3122585 20.08553692]
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x7f0518676c50>]
付属情報をつける
matplotlibで描画する際に,様々な付属情報をつける(もしくは消す)ことができます.よく使うのは以下の通りです.
plt.xlabel()でx軸にラベルをつける
plt.ylabel()でy軸にラベルをつける
plt.title()で図にタイトルをつける
plt.plot(label=’ラベル’)でplotにラベルをつけ, plt.legend()で凡例をつける
plt.xticks()でx軸に任意のticksをつける
plt.yticks()でy軸に任意のticksをつける
plt.axis(‘off’)で軸を消す
plt.plot(x,y)
# plt.xlabel()でx軸にラベルをつける
plt.xlabel('Efforts')
# plt.ylabel()でy軸にラベルをつける
plt.ylabel('Earning')
# plt.title()で図にタイトルをつける
plt.title('This is how your efforts earns')
Text(0.5, 1.0, 'This is how your efforts earns')
# plt.plot(label='ラベル')でplotにラベルをつけ, plt.legend()で凡例をつける
plt.plot(x, y, label='Earning with effort')
plt.legend()
# plt.xticks()でx軸に任意のticksをつける
plt.xticks(np.arange(-3, 4, 0.5))
# plt.yticks()でy軸に任意のticksをつける
plt.yticks([0, 5, 10, 20])
plt.show()
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = np.exp(x)*2
plt.plot(x, y1, label='first')
plt.plot(x, y2, label='second')
plt.legend()
<matplotlib.legend.Legend at 0x7f05182abc50>
plt.plot(x, y1, label='first')
plt.plot(x, y2, label='second')
plt.axis('off')
# plt.axis('off')で軸を消す
plt.legend()
<matplotlib.legend.Legend at 0x7f05182f8e10>
第21回
subplot
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = x*x
plt.subplot(1, 2, 1)
plt.plot(x, y1)
plt.subplot(1, 2, 2)
plt.plot(x, y2)
[<matplotlib.lines.Line2D at 0x7f0505d1d690>]
オブジェクト指向による記述
plt.figureオブジェクト
fig = plt.figure()
type(fig)
matplotlib.figure.Figure
<Figure size 432x288 with 0 Axes>
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
ax1.plot(x, y1)
ax2.plot(x, y2)
[<matplotlib.lines.Line2D at 0x7f0505aead10>]
# 1行2列のplotを作成 axesにはそれぞれのaxesオブジェクトがリストで返される
fig, axes = plt.subplots(nrows=1, ncols=2)
axes
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f0505bd2650>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f0505a22a10>],
dtype=object)
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
[<matplotlib.lines.Line2D at 0x7f0505894fd0>]
fig, axes = plt.subplots(nrows=3, ncols=3)
print(axes.shape)
(3, 3)
fig, axes = plt.subplots(nrows=3, ncols=3)
axes[1,2].plot(x,y2)
[<matplotlib.lines.Line2D at 0x7f05055cee90>]
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y1, label='something')
axes[1].plot(x, y1)
axes[0].set_xlabel('xlabel1')
axes[0].set_ylabel('xlabel2')
axes[0].set_title('plot title')
axes[0].set_xticks([-3, -2, -1, 3])
axes[0].set_yticks([0, 10, 20])
axes[0].legend()
axes[1].axis('off')
(-3.3, 3.3, -0.9520004243731263, 21.08732441592866)
第22回
グラフの大きさを調整する
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = np.exp(x)*2
fig, axes = plt.subplots()
axes.plot(x, y1)
[<matplotlib.lines.Line2D at 0x7f0505c7cb10>]
#この場合モニタで100画素x100画素のグラフが表示される
fig, axes = plt.subplots(figsize=(1,1), dpi=100)
axes.plot(x, y1)
[<matplotlib.lines.Line2D at 0x7f0505308750>]
fig, axes = plt.subplots(figsize=(10, 3))
axes.plot(x, y1)
[<matplotlib.lines.Line2D at 0x7f05056641d0>]
pngで保存する
fig, axes = plt.subplots(2, 1, figsize=(10, 3))
axes[0].plot(x, y1, label='something')
axes[1].plot(x, x*x)
axes[0].set_title('first')
axes[1].set_title('second')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
fig.savefig('savefig_sample.png')
fig, axes = plt.subplots(2, 1, figsize=(10, 3))
axes[0].plot(x, y1, label='something')
axes[1].plot(x, x*x)
axes[0].set_title('first')
axes[1].set_title('second')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
plt.tight_layout() #グラフを見やすく調整する
fig.savefig('savefig_sample.png')
fig, axes = plt.subplots()
axes.plot(x, y1, label='first')
axes.plot(x, y2, label='second')
axes.plot(x, y1+y2, label='first+second')
axes.legend()
<matplotlib.legend.Legend at 0x7f0505664f50>
pdfで保存する
from matplotlib.backends.backend_pdf import PdfPages
pdf = PdfPages('savefig_sample.pdf')
from matplotlib.backends.backend_pdf import PdfPages
pdf = PdfPages('savefig_sample.pdf')
#------グラフ作成-------
fig, axes = plt.subplots()
axes.plot(x, y1, label='first')
axes.plot(x, y2, label='second')
axes.plot(x, y1+y2, label='first+second')
axes.legend(loc=0)
#---------------------
#pdfに保存
pdf.savefig(fig)
#close処理(一応やる)
pdf.close()
大量のグラフをpdfで保存する
pdf = PdfPages('savemultifig_sample.pdf')
for i in range(0, 10):
#------グラフ作成--------
fig, axes = plt.subplots( )
#グラフの形状が徐々にかわるように設計しました.(適当です.)
axes.plot(x, y1 + x*i)
#タイトルをつけます.pdfで文字検索ができることを確認してください.
axes.set_title('ID:#{}'.format(i))
#-----------------------
#forループのなかで保存
pdf.savefig(fig)
#ループ後に閉じます
pdf.close()
第23回
グラフの装飾のしかた
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(-3, 3, 10)
y = np.exp(x)
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x7f050476fd90>]
color : グラフの線の色 ⇨ ’red’や’green’のように色の名前を指定します.’r’や’g’のように頭文字でもOKです.
lw (line width) : 線の太さ ⇨ 数字です.好みの大きさにしてください
ls (line style) : 線の種類 ⇨ ’-‘や’–‘のように指定します.よく使うのはこの二つのどちらかです.
marker : マーカーの種類 ⇨ ’o’や’x’ように指定します.マーカーの形が変わります.
markersize : マーカーの大きさ ⇨ 数字です.好みの大きさにしてください
markerfacecolor : マーカーの色 ⇨ ’red’や’green’のように色の名前を指定します.’r’や’g’のように頭文字でもOKです.
markeredgecolor : マーカーの枠に色 ⇨ ’red’や’green’のように色の名前を指定します.’r’や’g’のように頭文字でもOKです.
markeredgewidth : マーカーの枠の太さ ⇨ 数字です.好みの大きさにしてください
alpha : plotの透明度 ⇨ 0から1の間をfloatで指定します.0に近い程透明度が上がります.
plt.plot(x, y, color='red', lw=5, ls='--', marker='o', markersize=15, markerfacecolor='yellow', markeredgecolor='blue',
markeredgewidth=4, alpha=0.5)
[<matplotlib.lines.Line2D at 0x7f05050fbd90>]
散布図: plt.scatter()
import pandas as pd
df = pd.read_csv('train.csv')
plt.scatter(df['Age'], df['Fare'], alpha=0.3)
<matplotlib.collections.PathCollection at 0x7f04b99fbf50>
ヒストグラム: plt.hisgt()
plt.hist(df['Age'])
plt.show()
/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/histograms.py:829: RuntimeWarning: invalid value encountered in greater_equal
keep = (tmp_a >= first_edge)
/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/histograms.py:830: RuntimeWarning: invalid value encountered in less_equal
keep &= (tmp_a <= last_edge)
plt.hist(df['Age'], bins=50)
plt.show()
箱ひげ図: plt.boxplot()
df = df.dropna(subset=['Age'])
plt.boxplot(df['Age'])
plt.show()