概要

 CQ出版社の書籍『パソコン計測USBマイコン基板』で紹介されていたVB.NET用グラフ表示コンポーネントZedGraphを試しに使用するプログラムを作成し、グラフ表示ができることを確認した。


背景と目的

 先日扱った『パソコン計測USBマイコン基板』(以下、参考書とよぶ)には、付属基板の制御プログラム作成に関連してZedGraphというグラフ表示コンポーネントの紹介がされていた。私は、VB.NETでグラフ表示をやったことがないので、この機会にZedGraphを使いグラフ表示の方法を習得してみる。なお、ZedGraphはWeb上に詳しい使い方の説明があるので、ここは、初めて使用する者がこんな流れでプログラムを動かすことができましたという感じのメモとしたい。


詳細
1.実施内容の確認

 動かすまでの流れは
①VBでの使用準備
②主要なプロパティの確認とコーディング
③動作確認
である。それぞれの手順について、詳細を以下に記す。

2.詳細
2.1 VBでの使用準備

 ZedGraphをVBで使用するには、参考書47ページによればDLLを参照させるのと、実行アプリケーションと同じフォルダにZedGraph.DLLとZedGraph.XMLを置かなければならないとのこと。そこで、この指示に従い、ファイルの配置、参照処理をした。この結果、VBのツールボックスに配置されると思いきや、もう1ステップ必要で、図2.11のようにツールボックスで右クリック>アイテムの選択から.NET FrameworkのアイテムとしてZedGraphにチェックを入れる必要がある。これにより、ツールボックスにZedGraphコントロールが追加された。これでフォームに配置可能になったので、配置してみた結果が図2.12である。以上より、ZedGraphがVB上で扱えるようになった。

20130227233427
図2.11 アイテムの選択


20130227233434
図2.12 コントロールの配置


2.2 主要なプロパティの確認とコーディング

 グラフを表示するには、グラフ描画に必要な最低限のプロパティである
・データ
・グラフタイトルと軸タイトル
・軸スケールタイプ(ログ/リニア)と軸範囲
・系列タイトルと書式(線、ポインタの形、色
を設定する必要がある。そこで、ここではそれらのプロパティの確認と、実際にコーディングを行ってみる。

2.2.1 データ

 データは、xとyの値の組を
PointPairListクラスオブジェクト
のメンバとして保持させる。メンバとして追加させるには、
Dim PPL As PointPairList
PPL.Add(x,y)
といったメソッドでx,yの値を与えればよい。

2.2.2 グラフタイトルと軸タイトル

 グラフタイトルは
GraphPane.Title.Textプロパティ
軸タイトルはX、Yそれぞれ
GraphPane..XAxis.Title.Textプロパティ
GraphPane..XAxis.Title.Textプロパティ
にそれぞれ値をセットすればよい。

2.2.3 軸スケールタイプと範囲

 軸スケールタイプは、
GraphPane.XAxis.Typeプロパティ
で設定できる。値をセットするには、
AxisType列挙体
から選んで指定すればよい。
範囲は、最大最小それぞれ
zg1.GraphPane.YAxis.Scale.Min
zg1.GraphPane.YAxis.Scale.Max
を設定すればよい。これはY軸の例だがx軸も同じ名前のプロパティがある。

2.2.4 グラフ系列

 グラフ系列をグラフに追加するには、
GraphPane.AddCurveメソッド
を実行する。引数には、
系列名、データ、線の色、プロット点の形
の4つを指定する。系列名は文字列、データは、2.2.1で作ったListItemクラスオブジェクトを指定すればよい。線の色は、Color構造体、プロット点の形はSymbolType列挙体の値をそれぞれ使えばよい。

2.2.5 動作確認プログラム

 以上の内容に従い、サンプルプログラムを作成した。フォームには、zg1というZedGraphクラスのオブジェクトが配置されていてそのオブジェクトの各プロパティを設定したことになる。なお、最後にあるzg1.AxisChangeメソッドは、軸設定変更を画面に反映するために必要なので忘れてはならない。

Imports ZedGraph

Public Class Form1

    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'グラフタイトル
        zg1.GraphPane.Title.Text = "時間波形"

        '軸タイトル
        zg1.GraphPane.XAxis.Title.Text = "時間[sec]"
        zg1.GraphPane.YAxis.Title.Text = "電圧[V]"

        '軸タイプ
        zg1.GraphPane.XAxis.Type = AxisType.Linear

        '軸範囲
        zg1.GraphPane.YAxis.Scale.Min = -1
        zg1.GraphPane.YAxis.Scale.Max = 1

        ' 描画するデータを作成(試しに1kHz正弦波)
        Dim list As New PointPairList
        Dim i As Integer, x As Double, y As Double
        For i = 0 To 100
            x = i / 8000
            y = Math.Sin(2 * Math.PI * 1000 * x)
            list.Add(x, y)
        Next i

        ' グラフ系列の追加
        zg1.GraphPane.AddCurve("測定結果1", list, Color.Red, SymbolType.Diamond)

        ' グラフ情報を再計算
        zg1.AxisChange()

    End Sub
End Sub
2.3 動作確認

 作成したプログラムを実行した結果は、図2.3のとおり。設定したプロパティが正しく反映されていることがわかる。これにより、ZedGraphコントロールを用いてグラフを描く基本的な方法がわかった。

20130228001610
図2.3 作成したプログラムを実行した結果


まとめと今後の課題

 グラフ表示コントロールZedGraphを使用してグラフを描く方法が習得できた。今後いずれこのコントロールを使って何かプログラムを作成してみたい。