tkplot_pyplot.py 技術ドキュメント

ライブラリの機能や目的

tkplot_pyplot.py は、Pythonの強力なグラフ描画ライブラリである matplotlib.pyplot を拡張し、より高度なインタラクティブ機能やTkinterアプリケーションへの組み込みを容易にすることを目的としたライブラリです。

主な機能は以下の通りです。

  • Matplotlibのラッパー機能: matplotlib.pyplot の基本的な描画関数(例: subplots, legend)をラップし、追加の機能や設定を提供します。

  • Tkinterとの連携強化: tkPlot_tkinter ライブラリと連携し、MatplotlibのプロットをTkinterのGUIアプリケーションに組み込むためのインターフェースを提供します。これにより、MatplotlibのグラフをTkinterウィンドウ内で表示・操作できます。

  • インタラクティブなスライダーの追加: グラフ上にパラメータを調整するためのスライダーウィジェットを簡単に追加できます。これにより、リアルタイムでのデータ可視化やシミュレーションのパラメータ変更が可能になります。

  • イベント処理の基盤: tklibtkPlotEventRangeSelector といった機能を利用し、より高度なイベント処理やインタラクティブな選択機能の実装をサポートする基盤を提供します。

このライブラリは、Matplotlibの柔軟性とTkinterのGUI構築能力を組み合わせることで、動的でユーザーフレンドリーなデータ可視化ツールを開発する際の課題を解決します。

importする方法

このライブラリはPythonモジュールとして設計されており、他のPythonスクリプトから以下の方法でインポートできます。

import tkplot_pyplot

または、特定の関数やクラスを直接インポートすることも可能です。

from tkplot_pyplot import select_plt, tkPlot_pyplot

必要な非標準ライブラリとインストール方法

tkplot_pyplot.py を使用するには、以下の非標準ライブラリが必要です。

  1. matplotlib: グラフ描画機能を提供します。

    pip install matplotlib
    
  2. tklib: このライブラリの基盤となるユーティリティやGUIコンポーネントを提供します。tkplot_pyplot.pytklib.tkimporttklib.tkobject などのモジュールを使用しているため、tklib ライブラリがインストールされている必要があります。

    pip install tklibpy
    

tkinter は通常、Pythonの標準ライブラリとして含まれているため、別途インストールする必要はありません。

importできる変数と関数

このライブラリから直接インポートできる主要な関数とクラスは以下の通りです。

関数

select_plt(plt = None, use_tkinter = False, parent = None, title = "tkPlot_tkinter")

この関数は、matplotlib.pyplot のインスタンスを返すか、またはそれをTkinterウィンドウに埋め込んだ tkPlot_tkinter のインスタンスを返します。これにより、描画環境を簡単に切り替えることができます。

  • 動作:

    • tkPlot_pyplot クラスのインスタンスを生成します。

    • use_tkinterFalse の場合、標準の matplotlib.pyplot オブジェクトと None のルートウィンドウを返します。

    • use_tkinterTrue の場合、tkPlot_tkinter クラスのインスタンスを生成し、MatplotlibのプロットをTkinterウィンドウに埋め込みます。parent が指定されない場合は、新しい tk.Tk() ルートウィンドウが作成されます。

  • 引数:

    • plt (object, オプション, デフォルト: None): 使用する matplotlib.pyplot オブジェクト。通常は matplotlib.pyplot をそのまま渡します。

    • use_tkinter (bool, オプション, デフォルト: False): True の場合、Tkinterバックエンドを使用します。

    • parent (tk.Tk または tk.Toplevel, オプション, デフォルト: None): use_tkinterTrue の場合に、Matplotlibプロットを埋め込むTkinterの親ウィジェット。

    • title (str, オプション, デフォルト: "tkPlot_tkinter"): Tkinterウィンドウのタイトル。

  • 戻り値:

    • tuple: (tkplt, root, tkpyplot)

      • tkplt: use_tkinterFalse の場合は matplotlib.pyplot オブジェクト、True の場合は tkPlot_tkinter オブジェクト。

      • root: use_tkinterFalse の場合は NoneTrue の場合はTkinterのルートウィンドウまたは指定された parent

      • tkpyplot: tkPlot_pyplot クラスのインスタンス。

クラス

class tkPlot_pyplot(tkObject)

matplotlib.pyplot の機能を拡張し、Tkinterとの連携やインタラクティブな要素を追加するためのクラスです。tklib.tkobject.tkObject を継承しています。

  • __init__(self, plt = None, **kwargs)

    • 動作: tkPlot_pyplot オブジェクトを初期化します。内部で self.pltmatplotlib.pyplot オブジェクトを格納し、スライダーを管理するための空のリスト self.sliders を初期化します。

    • 引数:

      • plt (object, オプション, デフォルト: None): 内部で使用する matplotlib.pyplot オブジェクト。

      • **kwargs: 親クラス tkObject に渡される追加のキーワード引数。

    • 戻り値: なし

  • __str__(self)

    • 動作: オブジェクトの文字列表現を返します。

    • 引数: なし

    • 戻り値: str - matplotlib.pyplot を拡張していることを示す文字列。

  • get_window_from_plt(self)

    • 動作: 現在の matplotlib.pyplot オブジェクトに関連付けられたウィンドウを取得します。これは plt.get_current_fig_manager().window を呼び出すことによって行われます。

    • 引数: なし

    • 戻り値: object - Matplotlibのウィンドウオブジェクト。

  • create_window(self, fig)

    • 動作: このメソッドは現在、何も実装されていません(pass)。

    • 引数:

      • fig (matplotlib.figure.Figure): MatplotlibのFigureオブジェクト。

    • 戻り値: なし

  • pause(self, duration = 0.001, **kwargs)

    • 動作: 親クラス tkObjectpause メソッドを呼び出します。Matplotlibのイベントループを一時停止し、GUIイベントを処理するために使用されます。

    • 引数:

      • duration (float, オプション, デフォルト: 0.001): 一時停止する時間(秒)。

      • **kwargs: 親クラスのメソッドに渡される追加のキーワード引数。

    • 戻り値: なし

  • show(self, **kwargs)

    • 動作: 親クラス tkObjectshow メソッドを呼び出します。Matplotlibの描画ウィンドウを表示するために使用されます。

    • 引数:

      • **kwargs: 親クラスのメソッドに渡される追加のキーワード引数。

    • 戻り値: なし

  • sleep(self, duration)

    • 動作: プログラムの実行を一定時間停止します。内部で time.sleep() を呼び出します。

    • 引数:

      • duration (float): スリープする時間(秒)。

    • 戻り値: なし

  • subplots(self, ny, nx, figsize = None, dpi = 100, tight_layout = True, **kwargs)

    • 動作: 指定された行数と列数でサブプロットのグリッドを作成します。これは self.plt.subplots をラップしており、constrained_layout を使用して自動的にタイトなレイアウトを適用できます。

    • 引数:

      • ny (int): サブプロットの行数。

      • nx (int): サブプロットの列数。

      • figsize (tuple, オプション, デフォルト: None): Figureのサイズ(インチ)。例: (width, height)

      • dpi (int, オプション, デフォルト: 100): Figureの解像度(dots per inch)。

      • tight_layout (bool, オプション, デフォルト: True): プロット要素の自動調整を有効にするか(constrained_layout を使用)。

      • **kwargs: matplotlib.pyplot.subplots に渡される追加のキーワード引数。

    • 戻り値: tuple - (fig, axes)

      • fig: matplotlib.figure.Figure オブジェクト。

      • axes: matplotlib.axes.Axes オブジェクトまたはその配列。

  • legend(self, ax, h_list, l_list = None, is_draggable = True, **kwargs)

    • 動作: 指定されたAxesに凡例を追加します。このクラスには legend メソッドが2回定義されていますが、Pythonの性質上、後から定義されたこのメソッドが有効になります。このメソッドは、matplotlib.pyplot.legend をラップし、凡例をドラッグ可能にする機能を追加します。

    • 引数:

      • ax (matplotlib.axes.Axes): 凡例を追加するAxesオブジェクト。

      • h_list (list of list of matplotlib.artist.Artist または類似): 凡例に含めるアーティスト(例: Line2D オブジェクト)のリストのリスト。これらのハンドルは sum(h_list) によって平坦化されて使用されます。

      • l_list (list of list of str, オプション, デフォルト: None): 凡例に表示するラベルのリストのリスト。これらのラベルは sum(l_list) によって平坦化されて使用されます。None の場合、h_list のオブジェクトからラベルが自動的に抽出されます。

      • is_draggable (bool, オプション, デフォルト: True): 凡例をマウスでドラッグ可能にするか。

      • **kwargs: matplotlib.pyplot.legend に渡される追加のキーワード引数。

    • 戻り値: matplotlib.legend.Legend - 作成された凡例オブジェクト。

  • update(self)

    • 動作: このメソッドは現在、何も実装されていません(pass)。将来的な更新ロジックのプレースホルダーとして機能します。

    • 引数: なし

    • 戻り値: なし

  • add_slider(self, box, axcolor = 'lightgoldenrodyellow', label = 'A', min = 0.1, max = 10.0, init = 1.0, cmd = None)

    • 動作: MatplotlibのFigure内にインタラクティブなスライダーウィジェットを追加します。このスライダーの値が変更されると、指定されたコマンド(コールバック関数)が実行されます。

    • 引数:

      • box (list of float): スライダーが配置されるAxesの矩形領域。[left, bottom, width, height] の形式で、Figureの座標系における割合で指定します(例: [0.1, 0.9, 0.8, 0.05])。

      • axcolor (str, オプション, デフォルト: 'lightgoldenrodyellow'): スライダーの背景色。

      • label (str, オプション, デフォルト: 'A'): スライダーのラベル。

      • min (float, オプション, デフォルト: 0.1): スライダーの最小値。

      • max (float, オプション, デフォルト: 10.0): スライダーの最大値。

      • init (float, オプション, デフォルト: 1.0): スライダーの初期値。

      • cmd (callable, オプション, デフォルト: None): スライダーの値が変更されたときに呼び出される関数。引数として現在のスライダーの値を受け取ります。None の場合、デフォルトの update 関数(値をコンソールに出力する)が使用されます。

    • 戻り値: matplotlib.widgets.Slider - 作成されたスライダーオブジェクト。

    • 注意: このメソッドは matplotlib.widgets.Slider クラスを使用していますが、ソースコード上では Slider のインポートが明示されていません。これは matplotlib.widgets モジュールから Slider がインポートされていることを前提としています。

main scriptとして実行したときの動作

tkplot_pyplot.py は、モジュールとして他のスクリプトにインポートされることを想定して設計されています。このファイルには if __name__ == "__main__": ブロックが存在しないため、このファイルを直接Pythonインタプリタで実行しても、特別な動作は定義されていません。通常、このライブラリの機能を使用するには、上記「importする方法」で示された方法でインポートし、提供されている関数やクラスを呼び出す必要があります。