今回は株価のグラフを表示する際に、得た知識について備忘録を残しておきたいと思います。
開発環境
MacOS
Python3.7(anaconda)
VSCode
Matplotlibの使い方④(plt.subplots、plt.title、plt.legend)|Pythonによる可視化入門 #4
matplotlibの描画の基本 - figやらaxesやらがよくわからなくなった人向け
GridSpec
Matplotlib でプロットの更新を自動化する方法
matplotlibでわからなかったところ
まず、最初にmatplotlib.pyplot
を使用する際にわからなかった部分について書いていきます。
- グラフを描画する方法が多すぎてわからない
-
ax.plot
やplt.plot
があるけどどっちが何なのかわからない
と、まあこんな疑問がありました。
まあ、どの方法でもグラフを表示すること自体はできそうですが、細かい設定をするってなった場合に、やり方が分かれてくるんだと思います。
axやfigはなんなのか
fig
とはグラフを書くための用紙のようなものですね。みんな一枚の紙にグラフとかを書いていくと思いますが、その紙がこのfig
になります。
axes
はグラフのx線とy線
で囲まれた1つの四角になります。
ax.plot(x, y)について
株価グラフを表示したいなと思いまして、y(株価データ)
の値を取得することはできたのですが、x(時間)
の値はどうすれば良いのかわかりませんでした。
ただ、ax.plot(株価のデータ)
を入れても実行できました。
正直なんで実行できたのかはわからないのですが、取得したデータが、時間データ
も付随して取得されたおかげで、実行することができたのかなと思います。
その他の備忘録
figsize
figsize
はデフォルトは(6.4, 4.8)
になっておりまして、単位はインチになっております。単位をインチからピクセルに変更するには、100倍
すればできます。
plt.subplot
plt.subplot
は、行数、列数、順番
を指定します。
:)10×10の100個の5番目 -> RCP=10105
複数グラフの表示面積の割合を変えたい時
gridspecが便利
複数のグラフを表示したいと思った時に、それぞれのグラフの表示している面積の割合を違う状態にしたいと思いました。
from matplotlib import gridspec
gs = gridspec.GridSpec(縦の分割数, 横の分割数, height_ratios=(上, 下), width_ratios=(左, 右))
ax = [plt.subplot(gs[0, 0]), plt.subplot(gs[0, 1]), ...]
このような書き方になります。
ちなみに、上下の2つに分割する場合は、ax=[plt.subplot(gs[0,0])]
の次はax=[plt.subplot(gs[1,0])]
になります。
次に少し、上の書き方とは違いますが、fig
とax
を利用して、記述する例を示しておきます。
fig = plt.Figure()
gs = gridspec.GridSpec(2, 1, height_ratios=(4, 1))
ax[0] = fig.add_subplot(gs[0])
ax[1] = fig.add_subplot(gs[1])
このようにして、複数のグラフ領域を区切っていく流れになります。
gridspec_kwも使える
便利な道具は、あと2つくらいあるのですが、今回はgridspec_kw
を紹介したいと思います。
気になる方は下に参考記事を載せておきますので、見てください。
Matplotlib で異なるサブプロットサイズを作成する方法
fig, ax = plt.subplots(2, 1,
gridspec_kw={
'height_ratios':[4,1]
})
このような感じで、gridspec_kw
にheight_ratiosで高さの比率、width_ratiosで左右の比率を調整することができます。
グラフを更新する方法
例えば、10枚のグラフ
を1枚ずつ表示したいとなった場合、10回更新する必要があります。
ax.clear()
これを使えば、前に表示させたグラフを消去することができます。
さらに、**ax.axis('off')**を使うことで、軸などを消去することもできます。
2枚のグラフを表示して、更新したい場合
例えば、全部で20枚のグラフがあって、2枚ずつ表示したいとなった場合、こちらも10回更新する必要があります。
この場合の、グラフの更新方法を記述しておきます。
fig, ax = plt.subplots(2, 1,
gridspec_kw={
'height_ratios':[4,1]
})
ax[0].clear()
ax[1].clear()
このように、ax[0]
とax[1]
が存在しますので、2つともを消去する必要があります。
fig.canvas.draw()とfig.canvas.flush_events()
こちらの2つの処理文は、グラフを再描画するための機能になります。
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.1) # 0.1秒だけ開ける
こちらの文を記述することで、fig
全体でグラフを更新するという処理になります。
まとめ
今回は、matplotlib
の個人的によくわからない部分を記述していきました。
matplotlib
の記事は自分より詳しい方が投稿してくださっているので、そちらで勉強すると理解が早いかと思います。