スポンサーリンク
C#

C# バブルチャートを表示する(Chartコントロール)

スポンサーリンク
スポンサーリンク

バブル チャートは、ポイントグラフのバリエーションの 1 つです。データ ポイントはさまざまなサイズのバブルで置き換えられます。

 

ポイントグラフとの違い

バブルチャートが、ポイントグラフと違うところは「点の大きさをデータとして持っている」というところにあります。
これは、3次元グラフなどにあるZ軸のようなものです。

 

Chartコントロールでの表現方法

点の大きさ(Z軸)を表すためには、XYを持つ1点のデータにさらにデータを追加しなければいけません。
Chartコントロールでの「点1つのデータ」はDataPointクラスが持っています。
DataPointクラスのコンストラクタはオーバーロードがあり

1. XとYを1つずつ引数に取るコンストラクタ

public DataPoint(double xValue, double yValue);

2. Xと「Yの配列」を引数に取るコンストラクタ

public DataPoint(double xValue, double[] yValues);

があり、バブルチャートではこの”2.”のほうのコンストラクタを使用します。

 

引数のイメージは

X X方向の値
Y[0] Y方向の値
Y[1] Z方向の値(バブルチャートの場合、点の大きさ)

 

となります。

サンプルは下記のようになります。

private void frmMain_Load(object sender, EventArgs e)
{
    // フォームをロードするときの処理
    chart1.Series.Clear();  // ← 最初からSeriesが1つあるのでクリアします
    chart1.ChartAreas.Clear();

    // ChartにChartAreaを追加します
    string chart_area1 = "Area1";
    chart1.ChartAreas.Add(new ChartArea(chart_area1));
    // ChartにSeriesを追加します
    string legend1 = "Graph1";
    chart1.Series.Add(legend1);
    // グラフの種別を指定
    chart1.Series[legend1].ChartType = SeriesChartType.Bubble;  // ポイントグラフを指定
    //chart1.Series[legend1].MarkerSize = 20;                     // マークサイズを指定
    chart1.Series[legend1].MarkerStyle = MarkerStyle.Circle;    // マークスタイル(形状)を指定


    // データを用意します
    double[] x_values = new double[5] { 1.0, 0.8, 1.8, 0.2, 1.2 };
    double[] y_values = new double[5] { 1.0, 1.2, 0.8, 1.8, 0.2 };
    double[] bubble_values = new double[5] { 10.0, 1.2, 80.8, 15.8, 5.2 };  // バブルチャートのZ軸(ポイントの大きさを決めるデータ)

    // データをシリーズにセットします
    for (int i = 0; i < y_values.Length; i++)
    {
        //DataPoint dp = new DataPoint((double)x_values[i], y_values[i]);
        double[] y_vals = new double[2] { y_values[i], bubble_values[i] };
        DataPoint dp = new DataPoint((double)x_values[i], y_vals);
        chart1.Series[legend1].Points.Add(dp);
    }

}

 

このコードを実行すると、下図のようなグラフが表示されます。

 

基本的なバブルチャートでは、MarkStyle.Circleですが、ポイントグラフで紹介したようにSeriesのMarkStyleプロパティを設定するとそれぞれの形でバブルチャートを表示することもできます。

 

タイトルとURLをコピーしました