matplotlibでグラフを描く

2019年11月29日

分類やら統計やらで使う頻度の多いグラフ。

なんだかpythonはやたらとグラフで表したがってる気もします。

苦手意識を持ってる人でもわかりやすいように、簡単な例をソースコードとともに解説していきます。

使用するライブラリは「matplotlib」です。

以下ソースです。

# === plotサンプル  ここから  =========

%matplotlib inline

import matplotlib.pyplot as plt
import math
import numpy as np

# 折れ線グラフ
x = np.array([0,20,40,60,80,100])
y = np.array([20,25,100,50,35,40])
plt.plot(x,y)
plt.show()

# 一次関数
x = np.linspace(0,10,100)
y = x
plt.plot(x,y, color ="green")
plt.show()

# 一次関数(減少)
x = np.linspace(0,10,100)
y = x * -1
plt.plot(x,y, color ="green")
plt.show()

#二次関数
x = np.linspace(-10,10,100)
y = x*x
plt.plot(x,y, color ="red", linewidth= 6, linestyle = “dashed")
plt.show()

# === plotサンプル  ここまで  =========

Jupyter系での注意

Jupyter Notebookで実行する場合は次の1行が必要になります。
記述しなかった場合は真っ白になります。

%matplotlib inline

グラフの描画

色々なサンプルを見てて思ったのですが、一次関数のグラフって一瞬「!?」ってなると思います。
折れ線グラフから説明するのがわかりやすいと思います。

折れ線グラフ

まずは簡単な折れ線グラフから。
X軸とY軸にそれぞれ値(座標)を入れているだけです。

# 折れ線グラフ
x = np.array([0,20,40,60,80,100])
y = np.array([20,25,100,50,35,40])
plt.plot(x,y)
plt.show()

plotして表示すれば完成。

xとyの関係性がわかりやすいと思います。

一次関数のグラフ

サンプルとしてよく見る一次関数のグラフのグラフです。

# 一次関数
x = np.linspace(0,10,100)
y = x
plt.plot(x,y, color ="green")
plt.show()

np.linspaceの引数って何?って感じですね。引数3つ!?

これは「0から10までを100個に区切る」って奴です。
私は最初何をやっているかわかりませんでした(苦笑)

簡単に言うと、100個の配列を作ってます。0~10を100等分した奴で。

それと同じ値をyにも入れてます。

結果、同じ値の配列を2つ組み合わせるので、値は「[(0,0),……(10,10)]」みたいな感じになります。

それで正比例したグラフになります。

反比例させたい場合は

y = x * -1

とするだけでy軸の値が順次減少していくので、右肩下がりのグラフになります。

plt.plot(x,y, color ="green")

と色指定する事で、線の色を変えることもできます。

二次関数のグラフ

二次関数とはいっても、描画自体は一次関数のグラフと同じです。

#二次関数
x = np.linspace(-10,10,100)
y = x*x
plt.plot(x,y, color ="red", linewidth= 6, linestyle = “dashed")
plt.show()

xの範囲がマイナスの値でスタートし、プラスの範囲で終わってる事、yの値がxを二乗したものである事です。

マイナスとマイナスを掛ければプラスになるし、ゼロに近づけば値は小さくなるので自然と見慣れた二次関数のグラフになります。

plotには「color ="red", linewidth= 6, linestyle = “dashed"」で線の色、太さ、線の種類(破線)を指定してあります。

仕組みを知ってしまえば意外と簡単でしょ!?

普段アルゴリズムとかロジックとかをグリグリやってると、画面に出力ってのに、苦手意識を持ってる方もいるかと思います。
私もそうです。

でも意外と簡単ってのを知ってもらえたらうれしく思います。

python

Posted by m-matsumoto