Windows Forms で、StripLine を使うと色々便利だったのでメモ。
StripLineってなに?
MSDN StripLineより抜粋
ストリップ ラインは、標準またはカスタムの間隔でグラフの背景に影を付ける水平または垂直の範囲です。 ストリップ ラインを使用することができます。
・グラフ上の個々 の値を検索するためには、読みやすさを向上します。
・グラフをわかりやすくときは、データ ポイントを分割します。
・一定間隔で実行する日付を強調表示、たとえば、週末のデータを識別するために参照します。
・データの特定のキー範囲を強調表示します。
・特定の定数値にしきい値を表す線を追加します。
StripLine クラス (System.Windows.Forms.DataVisualization.Charting)
かなり抽象的な説明ですが、"グラフを装飾するための線分を表示するもの"という認識でしょう。
おそらく、最も使用するパターンは、
・グラフ上の個々 の値を検索するためには、読みやすさを向上します。
・特定の定数値にしきい値を表す線を追加します。
このあたりでしょう。
試しに使ってみる
今回は、ランダムに設定したデータの平均値をStripLine で表示してみます。
開発環境はこちら。
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;
namespace Chart02Sample
{
using System.Windows.Forms.DataVisualization.Charting;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
UpdateChartData();
}
private void UpdateChartData()
{
chart1.Series.Clear();
chart1.ChartAreas[0].AxisY.StripLines.Clear();
Random r = new Random();
PlotData[] plotData = Enumerable.Range(0, 100).Select(x => new PlotData { X = x, Y = r.Next(10, 90) }).ToArray();
Series series = chart1.Series.Add("サンプル");
series.ChartType = SeriesChartType.Line;
foreach (var data in plotData)
{
series.Points.AddXY(data.X, data.Y);
}
double mean = chart1.DataManipulator.Statistics.Mean("サンプル");
StripLine stlipLine = new StripLine
{
Text = $"平均値:{mean}",
TextAlignment = StringAlignment.Near,
TextLineAlignment = StringAlignment.Far,
Interval = 0,
IntervalOffset = mean,
BorderWidth = 1,
BorderDashStyle = ChartDashStyle.DashDot,
BorderColor = Color.Blue,
};
chart1.ChartAreas[0].AxisY.StripLines.Add(stlipLine);
}
private void ReloadButton_Click(object sender, EventArgs e)
{
UpdateChartData();
}
}
<summary>
</summary>
public class PlotData
{
public int X { get; set; }
public double Y { get; set; }
}
}
平均値は chart1.DataManipulator.Statistics.Mean("サンプル") で求めています。
DataManipulator は、プロットデータの集計など、結構汎用的に使えて便利なのですが今回は割愛。
これを実行するとこのようになります。↓↓↓
これを応用すれば、最大値や最小値、データのプロット範囲などを表現することが可能です。
ちょっとした工夫でグラフが見やすくなるので覚えておくと便利そうです。
今回使用したサンプルはこちら↓↓↓
github.com