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の結果に対して,凡例を右上に指定してつけよ。
- 関数 $\sigma(x)$ の名前は「theo」とせよ。
- 関数 $f(x)$ の名前は「obs」とせよ。
【解答】
#「グラフを表示」部分を下記で変更する plt.plot(x, sigmoid(x), label='theo') plt.plot(x, sigmoid(x)+_y, label='obs') plt.legend(loc=1)
色を変更し,線の太さを変える
ノック3 ノック2の結果に対して,下記を変更せよ。
- 「theo」の色をグレーに変更し,線の太さを2とせよ。
- 「obs」の色をブルーに変更し,線の太さを1とせよ。
- 「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の結果に対して,下記を変更せよ。
- $x$ 軸の値の表示範囲を $-5$ から $5$ までに指定せよ。
- $x$ 軸目盛の値の表示を $1$ 刻みにせよ。
- それ以外に,小目盛を表示させよ。
【解答】
#目盛と表示範囲の設定(下記を追記) plt.xlim(-5,5) #値の表示範囲-5から5までに指定 plt.xticks(np.arange(-5,6,1)) #目盛を1刻みで,-5から5まで表示 plt.minorticks_on() #小目盛を表示
タイトルとラベルの設定
ノック5 ノック4の結果に対して,下記を変更せよ。
- グラフのタイトルを「Result」とせよ。
- $x$ 軸のラベルを「x axis」で表示せよ。
- $y$ 軸のラベルを「y axis」で表示せよ。
【解答】
#タイトルとラベル(下記を追記) plt.title('Result') plt.xlabel('x axis') plt.ylabel('y axis')
グラフの大きさを指定する
ノック6 ノック5の結果に対して,下記を変更せよ。
- グラフの大きさを縦 $5$ インチ,横 $8$ インチに指定せよ。
【解答】
# 冒頭に以下を追加 plt.figure(figsize=(8,5))
補助線(垂線)を引く
ノック7 ノック6の結果に対して,下記を変更せよ。
- $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の結果に対して,下記を変更せよ。
- 表示した結果をパワーポイントに貼り付けて使用したいが,このままだとラベルと目盛の文字が小さく,使用できない。ラベルの文字を適切に大きくせよ。
【解答】
# 冒頭に以下を追加 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$ つのグラフ上に表示せよ。
- データ $(\boldsymbol x_1, \boldsymbol y_1)$ は,星印で表示せよ。
- データ $(\boldsymbol x_2, \boldsymbol y_2)$ は,三角印で表示せよ。
- データ $(\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')