Matplotlib は Python で最も広く使われているデータ可視化ライブラリの 1 つです。単純な可視化から複雑な可視化まで、ほとんどの場合、このライブラリは頼りになります。
このチュートリアルでは、Matplotlib で折れ線グラフを描く方法について見ていきます。
折れ線グラフは、一方の軸に数値を表示し、もう一方の軸にカテゴリ値を表示します。これらは一般的に棒グラフと同じように使うことができますが、より一般的には経時的な変化を記録するために使われます。
Matplotlib で線グラフを描画する
Matplotlib で線画を描画するには、PyPlot インスタンスの汎用関数である plot()
を使用します。特定の lineplot()
関数はありません – 汎用的な関数が自動的に線やマーカーを使ってプロットします。
それでは、私たち自身の小さなデータセットを作ってみましょう。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6]
y = [1, 5, 3, 5, 7, 8]
plt.plot(x, y)
plt.show()
これは単純な折れ線グラフになります。
別の方法として、x
軸を完全に省略して、y
だけをプロットすることもできます。この場合、X 軸は range(len(y))
で埋め尽くされることになります。
import matplotlib.pyplot as plt
y = [1, 5, 3, 5, 7, 8]
plt.plot(y)
plt.show()
この結果は、 x
の値が推測されるため、前とほとんど同じ折れ線グラフになります。
これは、 x
の値が推測されるため、前とほとんど同じ折れ線グラフになります。xの値は、最初の例のように、推論されたものであれ、私たちが手動で設定したものであれ、
yと同じ形状になるように意図されています。もし
yが 10 個の値を持つなら、
x` もそうでなければなりません。
しかし、この挙動を変更して、この範囲より上に行くこともできます。その場合は、代わりに y
の値がマップされます。
import matplotlib.pyplot as plt
y = [1, 5, 3, 5, 7, 8]
x = [10, 20, 30, 40, 50, 60]
plt.plot(x, y)
plt.show()
この結果、次のようになります。
ここまでは、一様な x
値を扱ってきました。分布を変えたらどうなるか見てみましょう。
import matplotlib.pyplot as plt
y = [1, 5, 3, 5, 7, 8]
x = [1, 2, 3, 4, 5, 20]
plt.plot(x, y)
plt.show()
最初の数個の値でスケールを設定します。そして、1, 5, 3, 5, 7
はいつものように、1, 2, 3, 4, 5
にマップされます。しかし、20
がどこからともなく飛び込んできたので、8
をそのままマップするわけにはいきません。
X軸は一様なスケールを維持したまま、5..20
から欠損した値を追加し、8
を20
にマッピングし、結果としてY軸は7..8
から直線になるようにしました。
Matplotlib で線グラフを対数的にプロットする
徐々に大きな数値を持つデータセットを扱うとき、そして特にその分布が指数関数的に傾いている場合、対数スケールで折れ線グラフを描くのが一般的です。
Y軸が一様に線形である代わりに、これは各区間を最後の区間より指数関数的に大きく変更します。
この結果、指数関数が基本的に直線としてプロットされることになります。このようなデータを扱う場合、指数関数的な数値を頭に入れるのは難しいので、対数的にデータをプロットすることで、より直感的に理解することができるようになるのです。
Numpyを使って指数関数を生成し、先程と同じように直線的にプロットしてみましょう。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5, 10) # [0, 0.55, 1.11, 1.66, 2.22, 2.77, 3.33, 3.88, 4.44, 5]
y = np.exp(x) # [1, 1.74, 3.03, 5.29, 9.22, 16.08, 28.03, 48.85, 85.15, 148.41]
plt.plot(x, y)
plt.show()
これは長さが10で、0から5までの値を含む配列を作成します。そして、Numpyの exp()
関数を使用して、これらの要素の指数値を計算し、結果として指数関数が線形スケールで生成されます。
このような関数は単純ではありますが、人間には概念化しにくく、大きなデータセットを扱う場合には小さな変化に気づかないことがあります。
では、Y軸のスケールを対数に変えてみましょう。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5, 10)
y = np.exp(x)
plt.yscale('log')
plt.plot(x, y)
plt.show()
PyPlotのインスタンスである plt
を使うと、X軸とY軸のスケールを設定することができます。ここでは、yscale()
関数を使ってY軸を対数スケールに設定しています。
ここでは、 linear
, log
, logit
, symlog
を使用することもできます。デフォルトは linear
です。
このコードを実行すると、次のようになります。
Matplotlib で折れ線グラフをカスタマイズする
通常の折れ線グラフは、 plot()
関数に引数を渡すことで、簡単にカスタマイズすることができます。
これらは通常、 linewidth
、 linestyle
、 color
といった引数になります。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randint(low=1, high=10, size=25)
plt.plot(x, color = 'blue', linewidth=3, linestyle='dashed')
plt.show()
この結果は
dashedの代わりに、例えば
dottedや
solidを使用することができました。ただし、
:、
–、
—、
-.` などの特殊文字も使用することができました。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randint(low=1, high=10, size=25)
plt.plot(x, color = 'blue', linewidth=3, linestyle='-.')
plt.show()
この結果、次のようになります。
行のスタイルがたくさんありますね。
結論
このチュートリアルでは、Matplotlib と Python を使って折れ線グラフを描くいくつかの方法について説明しました。また、対数スケールでプロットする方法と、折れ線グラフをカスタマイズする方法についても説明しました。
もしあなたがデータ可視化に興味があり、何から始めたらいいかわからない場合は、Pythonでデータ可視化に関する書籍の束をチェックしてみてください。
Pythonによるデータ可視化
データビジュアライゼーションで危険な存在になる
30日間無条件返金保証
初級から上級まで
定期的に無料で更新(最新更新は2021年4月)
ボーナスリソースやガイドを更新
Pythonでデータ可視化 MatplotlibとPandasは、Pythonの基礎知識を持つ全くの初心者が、PandasとMatplotlibを使って、単純なプロットからインタラクティブなボタンを持つアニメーションの3Dプロットまで、これらのライブラリで高度な作業をするための強力な基盤を構築できるように設計された書籍です。
本書は、Pythonの基本的な知識を持つ方を対象としています。
PandasとMatplotlibについて知っておく必要があることすべてを教えてくれる、詳細なガイドです。
Pythonでデータ可視化」は、Pythonの初級~中級開発者向けの本で、Pandasを使った簡単なデータ操作から、MatplotlibやSeabornといったコアなプロットライブラリを取り上げ、Altairのような宣言的・実験的なライブラリの活用方法までを案内しています。具体的には、11章にわたって、9つのPythonライブラリを取り上げています。Pandas、Matplotlib、Seaborn、Bokeh、Altair、Plotly、GGPlot、GeoPandas、そしてVisPyです。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。