Matplotlib は Python で最も広く使われているデータ可視化ライブラリの 1 つです。Matplotlib の人気の多くは、そのカスタマイズオプションによるもので、オブジェクトの階層構造からあらゆる要素を微調整することができます。
このチュートリアルでは、Matplotlib のプロット上に垂直線を描く方法を紹介します。
プロットの作成
まず、いくつかのランダムなデータで簡単なプロットを作ってみましょう。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
np.random.seed(42)
x = np.random.rand(150)
ax.plot(x)
plt.show()
ここでは、Numpy を使って [0, 1)
の範囲で 150 個のランダムなデータ点を生成しています。
さて、seed
を設定したので、このランダムな画像は何度でも複製することができます。例えば、20
と100
のところに縦線を引いてみましょう。
線を描くには、PyPlot のインスタンスの vlines()
または axvline()
関数を使う方法があります。もちろん、これらのメソッドは Axes
オブジェクトに対して呼び出すこともできます。
PyPlot.vlines() で Matplotlib のプロットに垂直線を描画する
まず、 vlines()
関数から始めましょう。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
np.random.seed(42)
x = np.random.rand(150)
ax.plot(x)
ax.vlines([20, 100], 0, 1, linestyles='dashed', colors='red')
plt.show()
vlines()関数は、線を引きたい X 値のスカラー(1次元配列)をいくつか引数として受け取ります。ここでは、
[20, 100]を与えて、2つのポイントをマークしていますが、
0..nのポイントから指定することもできます。次に、
yminと
ymaxの引数 - これらは線の高さを指定します。これは
np.random.rand()呼び出しの分布と同じなので、
0から
1までを指定します。そして、
linestylesや
colors` などのスタイルを設定します。これは、典型的な Matplotlib のスタイリングオプションを受け入れます。
このコードを実行すると、次のような結果になります。
X 軸の 20
点と 100
点に、赤色の破線が引かれた 2 本の縦線が表示されています。
この関数では ymin
と ymax
を具体的な値で設定することができ、axvline()
では高さをパーセントで選択したり、デフォルトで下から上へプロットすることができます。
この機能は、例えば、線を短くしたり長くしたりしたい場合に便利です。Y軸の範囲を変更して、0
と1
の代わりに10
から10
までの範囲を含むようにしましょう。ランダムなデータは [0, 1]
の範囲にあることに変わりはないので、別の視点からよりよく見ることができます。
fig, ax = plt.subplots(figsize=(12, 6))
np.random.seed(42)
x = np.random.rand(150)
ax.plot(x)
ax.set_ylim(-10, 10)
ax.vlines([20, 100], -2, 2, linestyles='dashed', colors='red')
ここでは、ランダムデータの範囲よりも長い線を設定していますが、それでも Axes
自体のサイズよりもずっと小さくなっています。
PyPlot.axvline() で Matplotlib プロットに縦線を引く
では、 axvline()
関数について見てみましょう。
fig, ax = plt.subplots(figsize=(12, 6))
np.random.seed(42)
x = np.random.rand(150)
ax.plot(x)
ax.set_ylim(-10, 10)
ax.axvline(20, color='red')
ax.axvline(100, color='red')
plt.show()
この関数には、他の関数にはないいくつかの制限があります。例えば、一度に1つの点しか描画できないことです。例えば、20
と100
のような複数の点に対してプロットしたい場合、この関数を2回呼び出さなければなりません。
また、 vlines()
のように linestyle
を指定することもできませんが、デフォルトでは ymin
と ymax
の引数は必要ありません。もし、今回のように省略した場合は、単に Axes
の上から下までの長さになります。
しかし、必要に応じて高さを変更することができます。今回は高さをパーセンテージで変更します。このパーセントは Axes
の上下を考慮したもので、0% は一番下、100% は一番上になります。例えば、50%から80%までの線を引いてみましょう。
fig, ax = plt.subplots(figsize=(12, 6))
np.random.seed(42)
x = np.random.rand(150)
ax.plot(x)
ax.set_ylim(-10, 10)
ax.axvline(20, 0.8, 0.5, color='red')
ax.axvline(100, 0.8, 0.5, color='red')
こうして出来上がったのが
結論
このチュートリアルでは、Matplotlib Plot に垂直線を描く方法について説明しました。
もしあなたがデータの可視化に興味があり、何から始めたらよいかわからない場合は、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です。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。