LoginSignup
3
5

More than 3 years have passed since last update.

matplotlibの基本操作をJupyter Labで書いてみた

Posted at

この記事はかめ(@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>]

png

付属情報をつける

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')

png

# 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()

png

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>

png

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>

png

第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>]

png

オブジェクト指向による記述

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>]

png

# 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)

png

fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
[<matplotlib.lines.Line2D at 0x7f0505894fd0>]

png

fig, axes = plt.subplots(nrows=3, ncols=3)
print(axes.shape)
(3, 3)

png

fig, axes = plt.subplots(nrows=3, ncols=3)
axes[1,2].plot(x,y2)
[<matplotlib.lines.Line2D at 0x7f05055cee90>]

png

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)

png

第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>]

png

#この場合モニタで100画素x100画素のグラフが表示される
fig, axes = plt.subplots(figsize=(1,1), dpi=100)
axes.plot(x, y1)
[<matplotlib.lines.Line2D at 0x7f0505308750>]

png

fig, axes = plt.subplots(figsize=(10, 3))
axes.plot(x, y1)
[<matplotlib.lines.Line2D at 0x7f05056641d0>]

png

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')

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')

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>

png

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()

png

大量のグラフを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()

png

png

png

png

png

png

png

png

png

png

第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>]

png

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>]

png

散布図: 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>

png

ヒストグラム: 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)

png

plt.hist(df['Age'], bins=50)
plt.show()

png

箱ひげ図: plt.boxplot()

df = df.dropna(subset=['Age'])
plt.boxplot(df['Age'])
plt.show()
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5