MSChart コントロール

Last Updated 2011/09/21

【重 要】

MSChart コントロールは .Net Framework 4.0 の標準コントロールとして追加されました。名前空間名、クラスの構成などは MSChart コントロールとまったく同じようです。ただし、MSChart コントロールではなく、単に、Chart コントロールとなっています。

以上のような経緯から本ページの記述の一部に不都合がでてきましたが、Visual Studio 2010 ではない人のためにそのままにしておきます。


MSChart コントロールは Microsoft が公開している .Net Framework 対応のコントロールです。"Chart" はチャートですね、日本では通常「グラフ」と呼んでいますが、棒グラフとか線グラフなどのグラフです。

Visual Basic 6.0 には MSCHRT20.ocx が付属していましたが、その .Net Framework 版です。しかも、大幅に洗練されています。おそらく、チャートに必要なすべての機能を持つといっても過言ではないでしょう。

このページでは MSChart コントロールの概要を紹介します。MSChart コントロールは .Net Framework 4.0 では標準コントロールになるというウワサですので。

なお、このページのサンプルコードは C# だけで作りましたが、C# 独特のコードはありませんので、コントロールの使い方という意味では Visual Basic な人にも十分理解してもらえると思います。


まず、チャート "chart" とグラフ "graph" との違いを考えて見ましょう。Google をあたると、「チャートグラフ」や「グラフチャート」という言葉も出てきます。また、「チャートおよびグラフの作成もできる」という表現も出てきます。WiKiPedia では「チャートは図・表・グラフと同じ」とあります。日本のサイトではおおむね「チャート」と「グラフ」は同じという意見が多いようですね。

英語とアメリカ語との違いかなとも考えましたが、ハッキリとは分かりませんでした。しかし、アメリカでは "chart" を使うほうが多いような印象はあります。

先に紹介した「グラフチャート」は「グラフィカルチャート」の省略ないしは勘違いではないでしょうか。つまり、チャートには「ヒットチャート」のようにランク付けなどの表という意味もありますから、図を使って表現するチャートをグラフといえるのかもしれません。

いずれにしろ、チャートとグラフの違いはハッキリしません。日本語的にはどちらでも同じと考えていいのではないかと思います。そこで、このページではチャートを使うことにします。

MSChart コントロールを入手する

以下に示す Microsoft のサイトで公開しています。

http://code.msdn.microsoft.com/mschart

以下の項目を選択して、それぞれのページでファイルをダウンロードしてください。

最初のものは MSChart コントロールの本体です。2 番目のものは不要です。3 番目は VS2008 のツールボックスにコントロールのアイコンを表示するためのものです。最後はコントロール用ヘルプファイル(.chm ファイル)ですが英語版しかありません。

また、MSChart コントロールのサンプルアプリケーション(というよりもデモアプリケーションに近いものですが)があります。

[Downloads] のページを開いて、"ASP.NET Samples" または "Windows Forms Samples" の希望のほうを選択し、WinSamples.zip をダウンロードしてください。

MSChart コントロールのマニュアル

MSChart コントロールのヘルプは英語版しか付いていませんので、日本語版を作りました。Software のページで公開しています。

MSChart コントロールをインストールする

上記で紹介したファイルを起動あるいは解凍してください。私の場合は特に問題なくインストールできました。

標準のインストールをすると、MSChart コントロールのアセンブリのファイル名と格納フォルダは以下のとおりです。

  C:\Program Files\Microsoft Chart Controls\Assemblies\System.Windows.Forms.DataVisualization.dll

ところで、インストール可能な環境について説明します。Microsoft のサイトで紹介している条件は以下のとおりです。

.Net Framework 3.5 SP1 はインターネットに接続済みの環境であれば、 Visual Studio 2008 を持っていなくてもインストール済みのはずです。

Note 私の勘違いでなければ、Windows Update を行えば、自動的にインストールされると思います。

私の環境は Windows Vista、VS2005 および VS2008 をインストール済みですが、この環境では問題なくインストールできました。

上記の "Chart Controls Add-on for Visual Studio 2008" をインストールすると、VS2008 のツールボックスに MSChart コントロール用のアイコンが表示され、デザイン時にフォームに貼り付けて使用できます。

MSChart コントロールは VS2008 が必要ということですが、VS2005 で使えないかとテストしてみました。VS2005 のプロジェクトを起こして、プロジェクトに MSChart コントロールのアセンブリへの参照を追加してみましたが、ツールボックスにコントロールのアイコンは表示されませんでした。したがって、デザイン時には使えません。しかし、実行時にコントロールのインスタンスを作る手順はうまくいきました。つまり、VS2008 は絶対的な条件ではないということになります。

MSChart コントロールで何ができるか

MSChart コントロールはチャート(グラフ)を作成するコントロールですが、対応するチャートの種類は 35 あります。代表的な棒チャートや線シャートなど、およそチャートとして考えられるすべての形式に対応しているといえるでしょう。3D 表示も可能です。

チャート各部、たとえば、座標軸や凡例などの形式も柔軟に設定可能です。また、チャート部分のスクロールやカーソルによる範囲の選択などにも対応しています。

Microsoft が無料で提供するアプリケーションは市販のものと比べると見劣りするものが多いのですが、MSChart コントロールはその心配はありません。

ここまでの説明ではいいことずくめですが、機能が豊富なだけに使い方はかなり熟練が必要です。先に説明した "Windows Forms Samples" はデモアプリケーションとしてはよくできています。おそらく、MSChart コントロールの機能のすべてをテストできるといっていいでしょう。しかし、コードの再利用性という意味でのサンプルコードとしては問題ありです。つまり、デザイン時にいろいろなプロパティを設定していますので、自分で同じものを作ろうと思うと相当大変です。

MSChart コントロールの使い方

VS2008 ではコントロールをフォームに貼り付けることができますが、VS2005 を使っている人はまだまだ多いですから、ここでは VS2005 で MSChart コントロールを使う手順について説明します。つまり、実行時にコントロールのインスタンスを作成する手順を使います。デザイン時に各プロパティを設定するよりもコードで設定するほうがコントロールの使い方を理解するという意味では分かりやすいと思います。

Note コントロールをフォームに貼り付ける場合、コントロールはデフォルトのオブジェクトを作成しますので、実行時にコントロールのインスタンスを作成する方法とではコントロールの使い方に若干の違いがあります。

まず、VS2005 でテスト用のプロジェクトを起こしてください。次に、プロジェクトに MSChart コントロールへの参照を追加します(コントロールのアセンブリとその格納位置についてはすでに説明しました)。

準備がよければ以下のコードを書いてください。

using System.Windows.Forms.DataVisualization.Charting;

namespace MSChartTest
{
  public partial class Form1 : Form
  {
    private Chart FChart; // MSChart コントロール

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      FChart = new Chart();
      FChart.Parent = this;
      FChart.SetBounds(20, 20, 200, 200);
      FChart.BackColor = Color.AliceBlue;
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ChartArea chartArea1 = new ChartArea();
      FChart.ChartAreas.Add(chartArea1);

      Series series1 = new Series();
      series1.Points.Add(34);
      series1.Points.Add(24);
      series1.Points.Add(32);
      series1.Points.Add(28);
      series1.Points.Add(44);

      FChart.Series.Add(series1);
    }
  }
}

アプリケーションを実行して button1 をクリックするとチャートを描画します。実行結果は下図のとおりです。

MSChart

1 行のコードを追加するだけで下図のようにもできます(これについては、カスタム属性のところで触れます)。

MSChart2

ここで紹介したチャートは MSChart コントロ−ルの中でももっとも簡単なものですが、もっと複雑なものも可能です。

サンプルアプリケーション(その1)

下図のようなチャートを作成するサンプルアプリケーションです。VS2005 で作りました。もちろん、VS2008 でも読み込めます。VS2008 の場合はフォームにコントロールを貼り付けることができますが、コードは実行時にコントロールのインスタンスを作成するようになっています。まずは、そのままコンパイルしてみてください。実行したら、ボタンを順番に押すと、それに対応して動作し、最終的に下図のようになります。

ChartSample1

Sample1.lzh (43,242 bytes)

サンプルアプリケーション(その2)

MSChart コントロールはいろいろなタイプのチャートを作成することができます。以下は、株価の推移をあらわすローソク足チャートです。ある会社の 1 年分の株価のデータをファイルにしておきました。下図はそのデータを読み込んで、1 か月分を表示しています。なお、データはカンマ区切りのいわゆる、CSV 形式にしました。データは、日付け、始値、高値、低値、終値の順番になっています。

ChartSample2

Sample2.lzh (41,844 byes)

カスタム属性

コントロールのプロパティとは別途に、カスタム属性なるものが設定されています。MSChart コントロールは棒チャートや円チャートのように、まったく性質の異なる図形を描画しますから、いろいろなプロパティを共通化することが難しいため、カスタム属性を設けたものと想像します。したがって、Candlestick タイプのようにカスタム属性を使わないことには外観を整えることができない場合もあります。

さて、「MSChart コントロールの使い方」の項に、「1 行のコードを追加するだけで下図のようにもできます。」とありますが、これは以下の 1 行を追加しただけで実現できます。"DrawingStyle" がカスタム属性、"Cylinder" が属性の値の 1 つです。

  chart1.Series[0]["DrawingStyle"] = "Cylinder";

カスタム属性は、ほぼすべてのタイプのチャートに適用できるものと、特定のタイプ、たとえば、Pie または Doughnut タイプだけに適用可能なものとがあります。また、3D 表示するものにだけ適用するものもあります。現バージョンでは 約 80 のカスタム属性が用意されていますので、ここで詳しく説明することはできません。私が公開しているマニュアルを参照してください。Software のページにあります(6 月 29 日の時点で準備中です)。

マクロ

MSChart コントロールのサンプルアプリケーションのコードの中に、"#VALY" のようなマクロのようなものが出てきて面食らいますが、これは MSChart コントロールで使用可能なキーワードのようです。しかし、Undocument ですので、ここで説明しようと思います。

Note Undocument なので、どのように名付ければいいのか分かりませんが、キーワードよりマクロのほうが適当だと考え、以後、マクロと呼ぶことにします。

カスタム属性と同様に、MSChart コントロールは通常のプロパティやメソッドでカバーしきれない機能に対していくつかのマクロを用意しています。たとえば、下図はデータポイント用ラベルの表示をマクロを使って Y 値と X 値とを表示したところです。

Keyword

これは以下のコードで実現できます。この構文の中の、"#VALY" と "#VALX" とがマクロです。

  chart1.Series[0].Label = "Y = #VALY\\nX = #VALX"

マクロの中には書式化をサポートするものがあって、.Net Framework の標準書式化文字列あるいはカスタム書式化文字列を指定できます。たとえば、下図は Y 値をカンマで 3 桁ごとに区切る文字列に書式化したものです。

Keyword2

これは以下のコードで実現できます。{ } で囲んだ部分には、.Net Framework の書式化文字列と同じ構文が使えます。

  chart1.Series[0].Label = "Y = #VALY{0:#,#}";

マクロとその機能

現段階で分かっているマクロをリストアップします。ただし、すべてをテストしたわけではありませんので、使う場合はテストしてからにしてください。

マクロ機能複数の Y 値をサポート文字列の書式化をサポート
#AVGシリーズのすべての Y 値の平均値YesYes
#AXISLABELデータポイントの座標軸ラベルNoNo
#CUSTOMPROPERTY(xxx)シリーズまたはデータポイントのカスタム属性値
xxx はカスタムプロパティ名
NoNo
#FIRSTシリーズの最初のポイントの Y 値YesYes
#INDEXデータポイントのインデックスNoYes
#LABELデータポイントラベルNoNo
#LASTシリーズの最後のポイントの Y 値YesYes
#LEGENDTEXTシリーズまたはデータポイントの凡例のテキストNoNo
#MAXシリーズのすべての Y 値の最大値YesYes
#MINシリーズのすべての Y 値の最小値YesYes
#PERCENTデータポイントの Y 値のパーセント値YesYes
#SERIESNAMEシリーズの識別名NoNo
#TOTALシリーズのすべての Y 値の合計YesYes
#VALXデータポイントの X 値NoYes
#VALYデータポイントの Y 値YesYes
#VALYnデータポイントの Y 値
n : 複数の Y 値を持つ場合の番号
例:#VALY2
YesYes

マクロを適用可能なプロパティ

オブジェクトプロパティ
Series および DataPointAxisLabel
Label
LabelToolTip
LegendText
LegendToolTip
ToolTip
Annotation
(SetAnchor メソッドを使ってデータポイントをアンカーするときのみ)
Text (TextAnnotation)
ToolTip
LegendCellColumn
(シリーズおよびデータポイント用凡例ラベルを自動的に作成するとき)
Text
Tooltip

−以上−