はじめに
Chartコントロールで、凡例の位置を変更する方法を解説します。結論を先に言ってしまうと、Legends.Positionを編集することで変更できます。
そもそもChartでグラフってどう作るの?という方は、以下の記事を先にご覧ください。
実行結果
後述するコードを実行すると、以下のように「凡例の位置を変更」することができます。比較のために変更あり/なしの結果を示します。
位置を指定しない場合
位置を指定しない場合、凡例は以下のように自動表示されます。
位置を指定した場合
後述するコードで凡例の位置を指定すると、以下のように凡例の位置を変更することが出来ます。
全体コード
折れ線グラフを表示するコードを使って解説します。
58~63行目の、chart1.Legends[0].Positionへの設定で、凡例の位置を変更しています。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Chartクラス関連の変数の宣言を簡略化するために
// Usingを追加しています
using System.Windows.Forms.DataVisualization.Charting;
namespace ChartCustomize2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// FormにChartコントロール(chart1)を
// 貼り付け済みであることを前提にしています。
// サンプル用のデータです。
double[] pointX = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double[] pointY = { 1.0, 2.0, 3.0, 4.0, 5.0 };
//
// 貼り付けたChartコントロールには、
// 初期値のデータがセットされているので、一旦クリアします
//
chart1.ChartAreas.Clear();
chart1.Series.Clear();
chart1.Titles.Clear();
// 「chartArea」という名前のエリアを生成します
ChartArea chartArea = new ChartArea("chartArea");
// 生成したエリアをChartコントロールに追加します
chart1.ChartAreas.Add(chartArea);
// チャートにタイトルを追加します
chart1.Titles.Add("凡例の位置変更あり (手動)");
// Series(系列)を生成します
Series series = new Series();
// 系列の種類を散布図に設定します
series.ChartType = SeriesChartType.Line;
// 系列の凡例を設置します
series.LegendText = "凡例1";
// 凡例自体の幅と高さを設定します
chart1.Legends[0].Position.Width = 20.0f;
chart1.Legends[0].Position.Height = 20.0f;
// 位置をfloatで設定します(0~100)
chart1.Legends[0].Position.X = 80.0f;
chart1.Legends[0].Position.Y = 90.0f;
// ElementPositionオブジェクトを生成して代入しても設定できます。
// ElementPosition posi = new ElementPosition(70.0f, 80.0f, 20.0f, 20.0f);
// chart1.Legends[0].Position = posi;
// 凡例の位置などの自動設定を無効化します
chart1.Legends[0].Position.Auto = false;
// 系列のポイント情報をセットします
for (int i = 0; i < 5; i++)
{
series.Points.AddXY(pointX[i], pointY[i]);
}
// 生成・設定した系列をChartコントロールに追加します
chart1.Series.Add(series);
}
}
}
コードのポイント
凡例の位置は Legends[0].Position.X/Y で指定
凡例の位置は chart1.Legends[0].Position.X, Y をFloatで指定することで変更できます。
// 位置をfloatで設定します(0~100)
chart1.Legends[0].Position.X = 80.0f;
chart1.Legends[0].Position.Y = 90.0f;
数値はグラフエリアの左上からの相対座標(0~100)で指定します。以下のようなイメージです。
・左上 (X=0.0, Y=0.0)
・右下 (X=100.0, Y=100.0)
凡例のサイズはPosition.Width / Heightで指定
凡例の大きさは、chart1.Legends[0].Position.Width, Height をfloatで指定します。
// 凡例自体の幅と高さを設定します
chart1.Legends[0].Position.Width = 20.0f;
chart1.Legends[0].Position.Height = 20.0f;
Position.Autoは設定 ”後” に有効化しない
前述したPositionの設定の後、 chart1.Legends[0].Position.Autoを「true」にすると、指定した値が無効化される(自動設定で上書きされる)ので注意してください。
Positionなどを手動設定(数値設定)すると、Position.Autoは「false」扱いとなるようです。不要なコードですが、記事内では説明のために明示的に「false」に設定しています。
まとめ
Chartコントロールで、凡例の位置を変更する方法を解説しました。参考になればうれしいです。
【おすすめ】UdemyでC#のスキルを上げる
C#のスキルを上げるには、Udemyの動画講座がおすすめです。「C#で読みやすいコードを書く50の方法」「保守性の高いコードの書き方」など、脱初心者/スキルアップのための講座が多数公開されています。
1講座 2440円程度で返金保証あり。視聴期間無制限なので「自分のペースでコスパ良くスキルアップしたい」「失敗したくない」という方におすすめです。
もっと詳しくChartの使い方を知る
このブログでは、Chartの他のテクニックについても解説しています。興味のある方は以下の記事もご覧ください。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。