2016-05-25

【備忘録】プロットの y 軸の目盛をカスタマイズ ─ wxPython

JavaFX で作っていたプログラムでリソース不足 (OutOfMemoryError) に悩まされているため、結局同じことになるかもしれないと思いつつも、軽快に GUI が動く wxPython にプログラムを移植しており、python のプログラミングに不慣れなためハマった個所を備忘録としてブログ用のサンプルに書き換えて残しています。

今回はマイナーな話題です。

wx.lib.plot.PlotCanvas を利用して、ある複数パラメータのトレンドデータを一度に扱って解析をするアプリケーションを作っているのですが、パラメータの値の大きさがまちまちであるため、縦に並べると y 軸の位置が不揃いになります。

JavaFX で当アプリケーションを作成していた時には、プロット枠の左側からの位置を制御できたので、wxPython の PlotCanvas で同じようなことをしようといろいろ調べましたが、どうもやり方が判りません。

そこで、苦肉の策として y 軸に表示される目盛の幅を、例えば 10 文字分というように固定幅を取るようにして揃えようとしました。

PlotCanvas を継承したクラスで、 y 軸の目盛を扱う _yticks メソッドをオーバーライドして目盛のカスタマイズをするのですが、参照したサイトの URL が判らなくなってしまいました。あとで追記します。参考として PlotCanvas を継承した MyPlot クラスを以下に示しました。

2016-05-26 同等の内容のサイトを見つけましたので、参考サイト [1] に加えました。

動作環境は次の通りです。

  • OS: Fedora 24 (x86_64, Beta)
  • python-2.7.11-4.fc24.x86_64
  • wxPython-3.0.2.0-10.fc24.x86_64
  • IDE: eclipse-pydev-5.0.0-1.fc24.x86_64
class MyPlot(plot.PlotCanvas):
    def __init__(self, parent, id,):
        plot.PlotCanvas.__init__(self, parent, wx.ID_ANY,)

    def _yticks(self, *args):

        """override  _yticks to write centigrade on y axis"""

        ticks = plot.PlotCanvas._yticks(self, *args)
        new_ticks = []

        for tick in ticks:
            t = tick[0]
            t_padded = str(t).rjust(10, ' ')
            new_ticks.append((t, t_padded))
              
        return new_ticks

Linux の環境では、これだけでうまくいくように見えるのですが Windows 上ではフォントが違うためかうまくいきません。フォントファミリーを Monospace にしたいのですが、思うようにコントロールできません。この件についてはひきつづき調べて、うまくいったら紹介することにします。

参考サイト

  1. wxPython-users - wx.lib.plot custom labels?

 

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: