LoginSignup
6
5

More than 3 years have passed since last update.

matplotlibに関する備忘録

Posted at

今回は株価のグラフを表示する際に、得た知識について備忘録を残しておきたいと思います。

開発環境

MacOS
Python3.7(anaconda)
VSCode

Matplotlibの使い方④(plt.subplots、plt.title、plt.legend)|Pythonによる可視化入門 #4
matplotlibの描画の基本 - figやらaxesやらがよくわからなくなった人向け
GridSpec
Matplotlib でプロットの更新を自動化する方法

matplotlibでわからなかったところ

まず、最初にmatplotlib.pyplotを使用する際にわからなかった部分について書いていきます。

  • グラフを描画する方法が多すぎてわからない
  • ax.plotplt.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])]になります。

次に少し、上の書き方とは違いますが、figaxを利用して、記述する例を示しておきます。

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_kwheight_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の記事は自分より詳しい方が投稿してくださっているので、そちらで勉強すると理解が早いかと思います。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5