C# Chartコントロールでクリックした場所に点をプロットする
概要
Axis.PixelPositionToValueメソッドと,ChartコントロールのMouseClickイベントを使う.
Chartコントロールの追加
Windows フォームアプリケーションを作成し,Chartコントロールを配置する.Chartコントロールはツールボックスの「データ」カテゴリの中にある.
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; }