XLPack for Matplotlib ユーザーマニュアル

1. 概要

XLPack for Matplotlib (以下 XLPack MPL と略記します) は Excel VBA より Python の Matplotlib を呼び出すことができるようにするためのライブラリプログラムです.

Matplotlib の主要な Python クラスおよびメソッドを VBA のクラスおよびメソッドにマッピングして VBA プログラムだけで Matplotlib を使用できるようにしたものです.

本プログラムは, 数値計算ライブラリ XLPack と組み合わせて, Excel で計算から結果の表示までを行うための可視化機能部分として試験的に開発中のものです. 対応する Matplotlib 関数は順次増やしていく予定ですが, 不足するものは別途提供される XLPack for Python を使用して補うこともできます.

2. 例題

使用イメージをつかむために簡単な例題を見てみます.

pyplot.plot を使ってサインカーブをプロットする例題です. Python では次のように書かれます.

import matplotlib.pyplot as plt
import numpy as np
import math
# make data
t = np.linspace(0, 2, 201)
s = 1 + np.sin(2 * math.pi * t)
# plot
plt.plot(t, s, '-b')
plt.xlabel("time (s)")
plt.ylabel("voltage (mV)")
plt.title("About as simple as it gets, folks")
plt.grid()
plt.show()

これと同じものを次のように VBA で書くことができます.

Dim Plt As New PyPlot

Function Pi() As Double
    Pi = 4 * Atn(1)
End Function

Sub Linspace(A As Double, B As Double, N As Long, X() As Double)
    Dim I As Long
    For I = 0 To N - 1
        X(I) = A + I * ((B - A) / (N - 1))
    Next
End Sub

Sub Test_Plt_Plot()
    Const N = 201
    Dim T(N - 1) As Double, S(N - 1) As Double
    Dim I As Long
    Call Linspace(0, 2, N, T())
    For I = 0 To N - 1
        S(I) = 1 + Sin(2 * Pi() * T(I))
    Next
    Call Plt.Plot(N, T(), S(), "-b")
    Call Plt.Xlabel("time (s)")
    Call Plt.Ylabel("voltage (mV)")
    Call Plt.Title("About as simple as it gets, folks")
    Call Plt.Grid
    Call Plt.Show
End Sub

VBA では Pyplot.Plot() のようにいきなりメソッドを呼び出すことはできないので, プログラムのどこかで (1 箇所でよい) Dim Plt As New PyPlot として PyPlot オブジェクトを作っておく必要があります. あとは Python と同じ要領でプログラミングすることができます.

実行結果はどちらも次のようになります.

同じ例題を Pyplot ではなくオブジェクトを使って書くこともできて, メインプログラムは次のようになります.

Sub Test_Plot()
    Const N = 201
    Dim T(N - 1) As Double, S(N - 1) As Double
    Dim I As Long
    Dim Fig As Figure, Ax As Axs
    Call Linspace(0, 2, N, T())
    For I = 0 To N - 1
        S(I) = 1 + Sin(2 * Pi() * T(I))
    Next
    Set Fig = Plt.Figure()
    Set Ax = Fig.Gca()
    Call Ax.Plot(N, T(), S(), "-b")
    Call Ax.Set_xlabel("time (s)")
    Call Ax.Set_ylabel("voltage (mV)")
    Call Ax.Set_title("About as simple as it gets, folks")
    Call Ax.Grid
    Call Plt.Show
End Sub

3. Matplotlib を使うための VBA クラスとメソッド

現時点では一部のクラスとメソッドしか実装されていません. 詳しくは以下を参照してください.

概要
VBA クラス/メソッドの詳細
使用例一覧