Python matplotlibで折れ線グラフや散布図を作る

スポンサーリンク
スポンサーリンク

はじめに

インストール

matplotlibは標準パッケージではありません。インストールが必要です。

pip install matplotlib

インポート

インポートは公式サイトに従って、別名にしています。皆さんもこれを踏襲しているようです。

import matplotlib.pyplot as plt

データのサンプル

なんでもいいのですが、以下のようなデータを用意しました。なおVXXのデータにVIXYの終値と、VXXとVIXYの差になります。

dateopenhighlowcloseVIXYdiff
02018-01-1827.41528.52026.52526.95022.3454.605
12018-01-1926.83527.39526.75026.82522.2454.580
22018-01-2227.03027.05026.05526.25521.7554.500
32018-01-2326.55026.99026.34526.73522.1654.570
42018-01-2426.84528.12026.82527.38522.7054.680

基本

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(12, 6))

ax = fig.add_subplot(1, 1, 1)

ax.set_title('title')
ax.set_xlabel('x')
ax.set_ylabel('y')

fig.show()

fig = plt.figure(パラメーター)

ax = fig.add_subplot(1, 1, 1)*本ページの最後のほうで例を紹介しています。

  • 画像の中に、いくつのグラフを作成するか、どの位置かを設定します。
  • (縦, 横, 番号)
    • 縦、横:それぞれの個数を指定します。
    • 番号:何番目の場所かを指定します。

ax.set_title('title')

  • グラフのタイトルを設定します。

ax.set_xlabel('x')

  • 横軸のタイトルを設定します。

ax.set_ylabel('y')

  • 縦軸のタイトルを設定します。

fig.show()

  • グラフの画像を表示します。

折れ線グラフ(plot)の作成

matplotlibの折れ線グラフ

import matplotlib.pyplot as plt

# Set data
x = df["date"]
y = df["close"]

fig = plt.figure(figsize=(12, 6))

ax = fig.add_subplot(1, 1, 1)

ax.plot(x, y, label='VXX')

ax.legend()
ax.set_title('Difference between VXX and VIXY')
ax.set_xlabel("date")
ax.set_ylabel("Dollar")

fig.show()
折れ線グラフを設定

ax.plot(x, y, color='blue', label='VXX')

  • (x,y):横と縦の値を設定します。
  • label:ラベルを設定します。
  • color:ラインの色を指定できます。”blue”,”green”,”red”,”black”など
  • marker:マーカーのデザインを変更できます。
  • markersize:マーカーの大きさを変更できます。
  • linestyle:ラインの種類を変更することができます。”dashed”など詳しくはこちら
  • linewidth:ライン幅を指定できます。
  • 複数のラインを描画させる場合は、以下のように、もう一度追記すればいいだけです。
    ax.plot(x, y, label='VXX')
    ax.plot(x, df.VIXY, label='VIXY')
凡例(ラベル)を表示

ax.legend()

  • loc:凡例(ラベル)の表示位置を指定します。
    文字で指定数値で指定
    ‘best’0
    ‘upper right’1
    ‘upper left’2
    ‘lower left’3
    ‘lower right’4
    ‘right’5
    ‘center left’6
    ‘center right’7
    ‘lower center’8
    ‘upper center’9
    ‘center’10
  • bbox_to_anchor(x, y, width, height):凡例(ラベル)の表示位置を相対的に数値で指定します。
    詳しくは以下を参照してください。
    https://matplotlib.org/api/legend_api.html?highlight=legend#module-matplotlib.legend

散布図(scatter)の作成

matplotlibの散布図

import matplotlib.pyplot as plt

# Set data
x = df["date"]
y = df["diff"]

fig = plt.figure(figsize=(12, 6))

ax = fig.add_subplot(1, 1, 1)

ax.scatter(x,y)

ax.set_title('Difference between VXX and VIXY')
ax.set_xlabel('date')
ax.set_ylabel('diff')

fig.show()
散布図を作成

ax.scatter(x,y)

横や縦のラインを追加で作成

matplotlibの横線・縦線

ax.hlines(y=df['diff'].mean(),xmin=df["date"].min(),xmax=df["date"].max(), label='mean') #横軸
ax.vlines(x=df['date'].mean(),ymin=df["diff"].min(),ymax=df["diff"].max(), label='median') #縦軸
横線を引く

ax.hlines()

  • y:線を引く縦軸の値を設定します。
  • xmin:線を引く横軸の最小値を設定します。
  • xmax:線を引く横軸の最大値を設定します。
  • label:任意でラベルを設定します。
縦を引く

ax.vlines()

  • x:線を引く横軸の値を設定します。
  • ymin:線を引く縦軸の最小値を設定します。
  • ymax:線を引く縦軸の最大値を設定します。
  • label:任意でラベルを設定します。

2画面のグラフを作成

一つの画像に2つのグラフやチャートを作成することができます。
本ページの最初の方にある「基本」でも説明しましたが、それの例になります。

VXXとVIXYの差異

import matplotlib.pyplot as plt

# generate data
x = df["date"]
y = df["diff"]

fig = plt.figure(figsize=(12, 12))

ax1 = fig.add_subplot(2, 1, 2)
ax2 = fig.add_subplot(2, 1, 1)

ax1.scatter(x,y)

ax1.set_title('Difference between VXX and VIXY')
ax1.set_xlabel('date')
ax1.set_ylabel('diff')

ax1.legend()

ax1.hlines(y=df['diff'].mean(),xmin=df["date"].min(),xmax=df["date"].max(), label='mean') #横軸

ax2.plot(x, df["close"], label='VXX')
ax2.plot(x, df["VIXY"], label='VIXY')

ax2.legend()
ax2.set_xlabel("date")
ax2.set_ylabel("Dollar")

fig.show()
2つの画面を追加する
ax1 = fig.add_subplot(2, 1, 2)
ax2 = fig.add_subplot(2, 1, 1)

ax1 = fig.add_subplot(2, 1, 2)

  • 縦に2個、横に1個、2番目の画面を設定。

ax2 = fig.add_subplot(2, 1, 2)

  • 縦に2個、横に1個、1番目の画面を設定。

ax1ax2のそれぞれに、グラフやチャートを1画面の時と同じように設定するだけです。

*1番目と2番めが逆になっていますが、仕様とは関係ありません。
逆にした意図は作成している途中で画面の上下を逆にしたかったからです。

コメント

タイトルとURLをコピーしました