複数のグラフを表示する方法

ZedGraphで複数のグラフを扱うには、ZedGraphControlクラスのMasterPaneプロパティを使用します。ところでZedGraphControlクラスのグラフ表示部へはGraphPaneプロパティからアクセスできますが、これはMasterPaneの最初のオブジェクトへの参照であり、次の3つのコードは同一のオブジェクトを参照します。

  • this.zedGraphControl.GraphPane;
  • this.zedGraphControl.MasterPane[ 0 ];
  • this.zedGraphControl.MasterPane.PaneList[ 0 ];

新しいグラフの追加

ZedGraphControlのGraphPaneのリスト (MasterPane) に新しいGraphPaneを追加します。それにはMasterPaneクラスのAdd()メソッドを使用します。

public void Add( GraphPane pane )

なおZedGraphControlオブジェクトを作成した時点で、1つのGraphPaneオブジェクトが作成されています。もしすべてのグラフを自身で作成したいならば、最初にGraphPaneのリストを消去します。

this.zedGraphControl.MasterPane.PaneList.Clear();

サンプルコード

// ZedGraphControlから MasterPaneを取得する
MasterPane masterPane = this.zedGraphControl.MasterPane;

// 新規にGraphPaneを作成する
GraphPane graphPane = new GraphPane();

// それをMasterPaneに追加する
masterPane.Add( graphPane );


実行結果

GraphPaneを追加しただけでは全体のレイアウトの計算が行われないため、上記のようには表示されません。そのときにはフォームのサイズを変更すると修正されます。もしくは後述のように明示的にレイアウトを調整します。

レイアウトの調整

public void SetLayout(
    Graphics g,            // グラフィックデバイス オブジェクト
    PaneLayout paneLayout  // 配置方法を記述した PaneLayout
    )
PaneLayout 列挙型
メンバー 説明 配置イメージ
ForceSquare 正方形のグリッドに配置する。
SquareColPreferred 基本的に正方形に配置するが、余剰分はを追加して配置する。
SquareRowPreferred 基本的に正方形に配置するが、余剰分はを追加して配置する。
SingleRow 1行に配置する。
SingleColumn 1列に配置する。
ExplicitCol23 1行目に2つ、2行目に3つ配置する。(5つのグラフ専用)
ExplicitCol32 1行目に3つ、2行目に2つ配置する。(5つのグラフ専用)
ExplicitRow23 1列目に2つ、2列目に3つ配置する。(5つのグラフ専用)
ExplicitRow32 1列目に3つ、2列目に2つ配置する。(5つのグラフ専用)

サンプルコード

SetLayout()メソッドの第1引数で必要なGraphicsオブジェクトは、ControlのCreateGraphicsなどで取得できます。Control.CreateGraphics メソッド (System.Windows.Forms) | MSDN

using( Graphics graphics = this.CreateGraphics() )
{
    this.zedGraphControl.MasterPane.SetLayout( graphics, PaneLayout.ForceSquare );
}

配置方法の明示

public void SetLayout(
    Graphics g,              // グラフィックデバイス オブジェクト
    bool isColumnSpecified,  //
    int[] countList,         //
    float[] proportion       //
    )

参考

  • MasterPane: Handling Multiple Graphs - ZedGraphWiki