C# Chartコントロールでクリックした場所に点をプロットする

概要

Axis.PixelPositionToValueメソッドと,ChartコントロールのMouseClickイベントを使う.

Chartコントロールの追加

Windows フォームアプリケーションを作成し,Chartコントロールを配置する.Chartコントロールはツールボックスの「データ」カテゴリの中にある.
f:id:whoopsidaisies:20131126021006p:plain

Axis.PixelPositionToValueメソッド

Chartコントロールのクライアント座標値をChartコントロールのグラフ上での座標値に変換するメソッド.クライアント座標とは何かについては,以下のページを参照.
スクリーン座標←→クライアント座標の変換を行うには? − @IT

MouseClickイベントの追加

フォームデザインの画面でChartコントロールを右クリックしてプロパティを選択する.プロパティウィンドウのイベントボタンをクリック.MouseClickの横の空白をダブルクリックすると,MouseClickイベントに呼び出される関数が作成されるので,以下のコードを追加する.

private void chart1_MouseClick(object sender, MouseEventArgs e)
{
    // クライアント座標をグラフ上の座標に変換する
    var x = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
    var y = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
    // Chartコントロールにデータを追加する
    chart1.Series[0].Points.AddXY(x, y);
}

サンプル

サンプルプログラムを作って動かした動画を以下に載せる.Chartコントロールの設定をFormロード時に以下のコードでしておく.

private void Form1_Load(object sender, EventArgs e)
{
    // レジェンド消す
    chart1.Legends.Clear();

    // Seriesを追加
    chart1.Series.Clear();
    chart1.Series.Add("chart1");
    // ChartTypeをPointに設定する
    chart1.Series["chart1"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
    
    // 軸を固定しておく
    chart1.ChartAreas[0].AxisX.Minimum = 0;
    chart1.ChartAreas[0].AxisX.Maximum = 100;
    chart1.ChartAreas[0].AxisX.Interval = 20;
    chart1.ChartAreas[0].AxisY.Minimum = 0;
    chart1.ChartAreas[0].AxisY.Maximum = 100;
    chart1.ChartAreas[0].AxisY.Interval = 20;
}


C# Chartコントロールでクリックした場所に点をプロットする - YouTube