やさしい理系物理

Matplotlib 30本ノック

この記事は今後更新する可能性があります。

0 はじめに・準備

Matplotlibは,Pythonにおいてデータを可視化するための拡張モジュールである。
ここでは,Matplotlibに慣れるための問題20問を紹介する。

準備として,NumpyとMatplotlibをインポートしておこう。

import numpy as np
import matplotlib.pyplot as plt

1 連続的なデータ(1〜5本目)

 基本的なデータを作る

ノック1 実数 $x$ に対し,シグモイド関数を通した結果を $\sigma(x)$ とし,$\sigma(x)$ にさらに 平均 $0$,標準偏差 $0.1$ のガウシアンノイズを加えた結果を $f(x)$ とする。 $-5$ から $5$ の範囲で, $y=\sigma(x),f(x)$ をグラフにせよ。

x = np.linspace(-5,5,100)

(必要であれば問題内のコードを用いること。以後も同じ)

【解答】

#シグモイド関数を定義
def sigmoid(x):
    y = 1 / (1 + np.exp(x))
    return y

#必要な変数を定義
x = np.linspace(-5,5,100)
_y = np.random.normal(0,0.1,100)

#グラフを表示
plt.plot(x, sigmoid(x))
plt.plot(x, sigmoid(x)+_y)

 判例をつける

ノック2 ノック1の結果に対して,凡例を右上に指定してつけよ。

  1. 関数 $\sigma(x)$ の名前は「theo」とせよ。
  2. 関数 $f(x)$ の名前は「obs」とせよ。

【解答】

#「グラフを表示」部分を下記で変更する
plt.plot(x, sigmoid(x), label='theo')
plt.plot(x, sigmoid(x)+_y, label='obs')
plt.legend(loc=1)

 色を変更し,線の太さを変える

ノック3 ノック2の結果に対して,下記を変更せよ。

  1. 「theo」の色をグレーに変更し,線の太さを2とせよ。
  2. 「obs」の色をブルーに変更し,線の太さを1とせよ。
  3. 「obs」を「theo」の上に被せて表示せよ。

【解答】

#「グラフを表示」部分を下記で変更する
plt.plot(x, sigmoid(x), color='gray', linewidth=2, label='theo')
plt.plot(x, sigmoid(x)+_y, color='blue', linewidth=1, label='obs')
plt.legend(loc=1)

 目盛と表示範囲

ノック4 ノック3の結果に対して,下記を変更せよ。

  1. $x$ 軸の値の表示範囲を $-5$ から $5$ までに指定せよ。
  2. $x$ 軸目盛の値の表示を $1$ 刻みにせよ。
  3. それ以外に,小目盛を表示させよ。

【解答】

#目盛と表示範囲の設定(下記を追記)
plt.xlim(-5,5) #値の表示範囲-5から5までに指定
plt.xticks(np.arange(-5,6,1)) #目盛を1刻みで,-5から5まで表示
plt.minorticks_on() #小目盛を表示

 タイトルとラベルの設定

ノック5 ノック4の結果に対して,下記を変更せよ。

  1. グラフのタイトルを「Result」とせよ。
  2. $x$ 軸のラベルを「x axis」で表示せよ。
  3. $y$ 軸のラベルを「y axis」で表示せよ。

【解答】

#タイトルとラベル(下記を追記)
plt.title('Result')
plt.xlabel('x axis')
plt.ylabel('y axis')

 グラフの大きさを指定する

ノック6 ノック5の結果に対して,下記を変更せよ。

  1. グラフの大きさを縦 $5$ インチ,横 $8$ インチに指定せよ。

【解答】

# 冒頭に以下を追加
plt.figure(figsize=(8,5))

 補助線(垂線)を引く

ノック7 ノック6の結果に対して,下記を変更せよ。

  1. $y=0$ の補助線を,点線で表示せよ。

【解答】

# 補助線(下記を追記)
# plt.hlines(y座標, 始点, 終点, linestyles=(0,(5,5)), colors='gray', linewidth=0.75, zorder=-1)
plt.hlines(0, -5, 5, linestyles=(50,(5,5)), colors='gray', linewidth=0.75, zorder=-1)

 文字を大きくする

ノック8 ノック7の結果に対して,下記を変更せよ。

  1. 表示した結果をパワーポイントに貼り付けて使用したいが,このままだとラベルと目盛の文字が小さく,使用できない。ラベルの文字を適切に大きくせよ。

【解答】

# 冒頭に以下を追加
plt.rcParams['font.size'] = 15

2 散布図のデータ(9〜10本目)

 基本的なデータを作る

ノック9 $3$ つのデータの組 $(\boldsymbol x_1, \boldsymbol y_1),(\boldsymbol x_2, \boldsymbol y_2),(\boldsymbol x_3, \boldsymbol y_3)$ を,下記のコードで用意した。これらを散布図として,下記の表現で $1$ つのグラフ上に表示せよ。

  1. データ $(\boldsymbol x_1, \boldsymbol y_1)$ は,星印で表示せよ。
  2. データ $(\boldsymbol x_2, \boldsymbol y_2)$ は,三角印で表示せよ。
  3. データ $(\boldsymbol x_3, \boldsymbol y_3)$ は,バツ印で表示せよ。

x1 = np.random.normal(10,5,30)
y1 = np.random.normal(10,5,30)

x2 = np.random.normal(20,5,30)
y2 = np.random.normal(20,5,30)

x3 = np.random.normal(30,5,30)
y3 = np.random.normal(30,5,30)

【解答】

#グラフを表示
plt.scatter(x1, y1, marker='*')
plt.scatter(x2, y2, marker='^')
plt.scatter(x3, y3, marker='x')

▲ To Top ▲