WinForms のチャートタイプ > 統計チャート > WinForms ヒストグラム |
ヒストグラムは、連続的な区間または一定の期間にわたるデータ分布を視覚的に表現したものです。このグラフは、生データ値を重複のない連続した区間に分割することで得られる各区間、すなわちビンの度数を示す縦棒で構成されます。したがって、ヒストグラムは、最大値が収まる範囲を推定したり、データ値に極値やギャップがある場合にそれらを把握するために役立ちます。たとえば、ある年齢層でどの身長の範囲に入る生徒が最大数になるかを特定するときにヒストグラムは便利です。
累積ヒストグラムはヒストグラムの一種です。度数ではなく累積度数をプロットするため、各ビンには、そこまでのすべてのビンの測定値の累計が示されます。
ヒストグラム |
累積ヒストグラム |
---|---|
FlexChart を使用すると、ChartType プロパティを Histogram に設定し、チャートにヒストグラム系列を追加することによって WinForms ヒストグラムを作成できます。データが提供されると、FlexChart は自動的にビンを計算してデータをグループ化し、ヒストグラムを作成します。ただし、必要に応じて、BinWidth プロパティを設定することで、ビンの幅を設定することもできます。累積ヒストグラムを作成するには、CumulativeMode プロパティを true に設定します。
// 系列をクリアします this.flexChart1.Series.Clear(); // StatisticalChartのヘッダーを設定します flexChart1.Header.Content = "HighSchool : Height Distribution"; // ChartTypeをヒストグラムに設定します flexChart1.ChartType = ChartType.Histogram; // 系列を作成して追加します histogramSeries = new C1.Win.Chart.Histogram(); histogramSeries.Name = "Frequency"; histogramSeries.Binding = "X"; flexChart1.Series.Add(histogramSeries); // データソースを指定します flexChart1.DataSource = GetPointData(); flexChart1.Binding = "Y"; // FlexChartのX軸を「X」にバインドして、高さが水平軸に表示されるようにします flexChart1.BindingX = "X"; // X軸の形式を設定します flexChart1.AxisX.Title = "Height (cms)"; flexChart1.AxisX.Format = "0.00";
' 系列をクリアします Me.flexChart1.Series.Clear() ' StatisticalChartのヘッダーを設定します flexChart1.Header.Content = "HighSchool : Height Distribution" ' ChartTypeをヒストグラムに設定します flexChart1.ChartType = ChartType.Histogram ' 系列を作成して追加します histogramSeries = New C1.Win.Chart.Histogram() histogramSeries.Name = "Frequency" histogramSeries.Binding = "X" flexChart1.Series.Add(histogramSeries) ' データソースを指定します flexChart1.DataSource = GetPointData() flexChart1.Binding = "Y" ' FlexChartのX軸を「X」にバインドして、高さが水平軸に表示されるようにします flexChart1.BindingX = "X" ' X軸の形式を設定します flexChart1.AxisX.Title = "Height (cms)" flexChart1.AxisX.Format = "0.00"
上記のサンプルコードは、GetPointData という名前のカスタムメソッドを使用してチャートにデータを提供しています。要件に基づいてデータソースを設定できます。
/// <summary> /// StatisticalChartのデータを作成するメソッド /// </summary> public static List<PointD> GetPointData() { var original = new List<PointD>() { new PointD{X=161.2,Y= 51.6}, new PointD{X=167.5,Y= 59.0}, new PointD{X=159.5,Y= 49.2}, new PointD{X=157.0,Y= 63.0}, new PointD{X=155.8,Y= 53.6}, new PointD{X=170.0,Y= 59.0}, new PointD{X=159.1,Y= 47.6}, new PointD{X=166.0,Y= 69.8}, new PointD{X=176.2,Y= 66.8}, new PointD{X=160.2,Y= 75.2}, new PointD{X=172.5,Y= 55.2}, new PointD{X=170.9,Y= 54.2}, new PointD{X=172.9,Y= 62.5}, new PointD{X=153.4,Y= 42.0}, new PointD{X=160.0,Y= 50.0}, new PointD{X=147.2,Y= 49.8}, new PointD{X=168.2,Y= 49.2}, new PointD{X=175.0,Y= 73.2}, new PointD{X=157.0,Y= 47.8}, new PointD{X=167.6,Y= 68.8}, new PointD{X=159.5,Y= 50.6}, new PointD{X=175.0,Y= 82.5}, new PointD{X=166.8,Y= 57.2}, new PointD{X=176.5,Y= 87.8}, new PointD{X=170.2,Y= 72.8}, new PointD{X=174.0,Y= 54.5}, new PointD{X=173.0,Y= 59.8}, new PointD{X=179.9,Y= 67.3}, new PointD{X=170.5,Y= 67.8}, new PointD{X=160.0,Y= 47.0}, new PointD{X=154.4,Y= 46.2}, new PointD{X=162.0,Y= 55.0}, new PointD{X=176.5,Y= 83.0}, new PointD{X=160.0,Y= 54.4}, new PointD{X=152.0,Y= 45.8}, new PointD{X=162.1,Y= 53.6}, new PointD{X=170.0,Y= 73.2}, new PointD{X=160.2,Y= 52.1}, new PointD{X=161.3,Y= 67.9}, new PointD{X=166.4,Y= 56.6}, new PointD{X=168.9,Y= 62.3}, new PointD{X=163.8,Y= 58.5}, new PointD{X=167.6,Y= 54.5}, new PointD{X=160.0,Y= 50.2}, new PointD{X=161.3,Y= 60.3}, new PointD{X=167.6,Y= 58.3}, new PointD{X=165.1,Y= 56.2}, new PointD{X=160.0,Y= 50.2}, new PointD{X=170.0,Y= 72.9}, new PointD{X=157.5,Y= 59.8}, new PointD{X=167.6,Y= 61.0}, new PointD{X=160.7,Y= 69.1}, new PointD{X=163.2,Y= 55.9}, new PointD{X=152.4,Y= 46.5}, new PointD{X=157.5,Y= 54.3}, new PointD{X=168.3,Y= 54.8}, new PointD{X=180.3,Y= 60.7}, new PointD{X=165.5,Y= 60.0}, new PointD{X=165.0,Y= 62.0}, new PointD{X=164.5,Y= 60.3}, new PointD{X=156.0,Y= 52.7}, new PointD{X=160.0,Y= 74.3}, new PointD{X=163.0,Y= 62.0}, new PointD{X=165.7,Y= 73.1}, new PointD{X=161.0,Y= 80.0}, new PointD{X=162.0,Y= 54.7}, new PointD{X=166.0,Y= 53.2}, new PointD{X=174.0,Y= 75.7}, new PointD{X=172.7,Y= 61.1}, new PointD{X=167.6,Y= 55.7}, new PointD{X=151.1,Y= 48.7}, new PointD{X=164.5,Y= 52.3}, new PointD{X=163.5,Y= 50.0}, new PointD{X=152.0,Y= 59.3}, new PointD{X=169.0,Y= 62.5}, new PointD{X=164.0,Y= 55.7}, new PointD{X=161.2,Y= 54.8}, new PointD{X=155.0,Y= 45.9}, new PointD{X=170.0,Y= 70.6}, new PointD{X=176.2,Y= 67.2}, new PointD{X=170.0,Y= 69.4}, new PointD{X=162.5,Y= 58.2}, new PointD{X=170.3,Y= 64.8}, new PointD{X=164.1,Y= 71.6}, new PointD{X=169.5,Y= 52.8}, new PointD{X=163.2,Y= 59.8}, new PointD{X=154.5,Y= 49.0}, new PointD{X=159.8,Y= 50.0}, new PointD{X=173.2,Y= 69.2}, new PointD{X=170.0,Y= 55.9}, new PointD{X=161.4,Y= 63.4}, new PointD{X=169.0,Y= 58.2}, new PointD{X=166.2,Y= 58.6}, new PointD{X=159.4,Y= 45.7}, new PointD{X=162.5,Y= 52.2}, new PointD{X=159.0,Y= 48.6}, new PointD{X=162.8,Y= 57.8}, new PointD{X=159.0,Y= 55.6}, new PointD{X=179.8,Y= 66.8}, new PointD{X=162.9,Y= 59.4}, new PointD{X=161.0,Y= 53.6}, new PointD{X=151.1,Y= 73.2}, new PointD{X=168.2,Y= 53.4}, new PointD{X=168.9,Y= 69.0}, new PointD{X=173.2,Y= 58.4}, new PointD{X=171.8,Y= 56.2}, new PointD{X=178.0,Y= 70.6}, new PointD{X=164.3,Y= 59.8}, new PointD{X=163.0,Y= 72.0}, new PointD{X=168.5,Y= 65.2}, new PointD{X=166.8,Y= 56.6}, new PointD{X=172.7,Y= 105.2}, new PointD{X=163.5,Y= 51.8}, new PointD{X=169.4,Y= 63.4}, new PointD{X=167.8,Y= 59.0}, new PointD{X=159.5,Y= 47.6}, new PointD{X=167.6,Y= 63.0}, new PointD{X=161.2,Y= 55.2}, new PointD{X=160.0,Y= 45.0}, new PointD{X=163.2,Y= 54.0}, new PointD{X=162.2,Y= 50.2}, new PointD{X=161.3,Y= 60.2}, new PointD{X=149.5,Y= 44.8}, new PointD{X=157.5,Y= 58.8}, new PointD{X=163.2,Y= 56.4}, new PointD{X=172.7,Y= 62.0}, new PointD{X=155.0,Y= 49.2}, new PointD{X=156.5,Y= 67.2}, new PointD{X=164.0,Y= 53.8}, new PointD{X=160.9,Y= 54.4}}; return original; }
''' <summary> ''' StatisticalChartのデータを作成するメソッド ''' </summary> Public Shared Function GetPointData() As List(Of PointD) Dim original As List(Of PointD) = New List(Of PointD)() From { New PointD() With { .X = 161.2, .Y = 51.6 }, New PointD() With { .X = 167.5, .Y = 59.0 }, New PointD() With { .X = 159.5, .Y = 49.2 }, New PointD() With { .X = 157.0, .Y = 63.0 }, New PointD() With { .X = 155.8, .Y = 53.6 }, New PointD() With { .X = 170.0, .Y = 59.0 }, New PointD() With { .X = 159.1, .Y = 47.6 }, New PointD() With { .X = 166.0, .Y = 69.8 }, New PointD() With { .X = 176.2, .Y = 66.8 }, New PointD() With { .X = 160.2, .Y = 75.2 }, New PointD() With { .X = 172.5, .Y = 55.2 }, New PointD() With { .X = 170.9, .Y = 54.2 }, New PointD() With { .X = 172.9, .Y = 62.5 }, New PointD() With { .X = 153.4, .Y = 42.0 }, New PointD() With { .X = 160.0, .Y = 50.0 }, New PointD() With { .X = 147.2, .Y = 49.8 }, New PointD() With { .X = 168.2, .Y = 49.2 }, New PointD() With { .X = 175.0, .Y = 73.2 }, New PointD() With { .X = 157.0, .Y = 47.8 }, New PointD() With { .X = 167.6, .Y = 68.8 }, New PointD() With { .X = 159.5, .Y = 50.6 }, New PointD() With { .X = 175.0, .Y = 82.5 }, New PointD() With { .X = 166.8, .Y = 57.2 }, New PointD() With { .X = 176.5, .Y = 87.8 }, New PointD() With { .X = 170.2, .Y = 72.8 }, New PointD() With { .X = 174.0, .Y = 54.5 }, New PointD() With { .X = 173.0, .Y = 59.8 }, New PointD() With { .X = 179.9, .Y = 67.3 }, New PointD() With { .X = 170.5, .Y = 67.8 }, New PointD() With { .X = 160.0, .Y = 47.0 }, New PointD() With { .X = 154.4, .Y = 46.2 }, New PointD() With { .X = 162.0, .Y = 55.0 }, New PointD() With { .X = 176.5, .Y = 83.0 }, New PointD() With { .X = 160.0, .Y = 54.4 }, New PointD() With { .X = 152.0, .Y = 45.8 }, New PointD() With { .X = 162.1, .Y = 53.6 }, New PointD() With { .X = 170.0, .Y = 73.2 }, New PointD() With { .X = 160.2, .Y = 52.1 }, New PointD() With { .X = 161.3, .Y = 67.9 }, New PointD() With { .X = 166.4, .Y = 56.6 }, New PointD() With { .X = 168.9, .Y = 62.3 }, New PointD() With { .X = 163.8, .Y = 58.5 }, New PointD() With { .X = 167.6, .Y = 54.5 }, New PointD() With { .X = 160.0, .Y = 50.2 }, New PointD() With { .X = 161.3, .Y = 60.3 }, New PointD() With { .X = 167.6, .Y = 58.3 }, New PointD() With { .X = 165.1, .Y = 56.2 }, New PointD() With { .X = 160.0, .Y = 50.2 }, New PointD() With { .X = 170.0, .Y = 72.9 }, New PointD() With { .X = 157.5, .Y = 59.8 }, New PointD() With { .X = 167.6, .Y = 61.0 }, New PointD() With { .X = 160.7, .Y = 69.1 }, New PointD() With { .X = 163.2, .Y = 55.9 }, New PointD() With { .X = 152.4, .Y = 46.5 }, New PointD() With { .X = 157.5, .Y = 54.3 }, New PointD() With { .X = 168.3, .Y = 54.8 }, New PointD() With { .X = 180.3, .Y = 60.7 }, New PointD() With { .X = 165.5, .Y = 60.0 }, New PointD() With { .X = 165.0, .Y = 62.0 }, New PointD() With { .X = 164.5, .Y = 60.3 }, New PointD() With { .X = 156.0, .Y = 52.7 }, New PointD() With { .X = 160.0, .Y = 74.3 }, New PointD() With { .X = 163.0, .Y = 62.0 }, New PointD() With { .X = 165.7, .Y = 73.1 }, New PointD() With { .X = 161.0, .Y = 80.0 }, New PointD() With { .X = 162.0, .Y = 54.7 }, New PointD() With { .X = 166.0, .Y = 53.2 }, New PointD() With { .X = 174.0, .Y = 75.7 }, New PointD() With { .X = 172.7, .Y = 61.1 }, New PointD() With { .X = 167.6, .Y = 55.7 }, New PointD() With { .X = 151.1, .Y = 48.7 }, New PointD() With { .X = 164.5, .Y = 52.3 }, New PointD() With { .X = 163.5, .Y = 50.0 }, New PointD() With { .X = 152.0, .Y = 59.3 }, New PointD() With { .X = 169.0, .Y = 62.5 }, New PointD() With { .X = 164.0, .Y = 55.7 }, New PointD() With { .X = 161.2, .Y = 54.8 }, New PointD() With { .X = 155.0, .Y = 45.9 }, New PointD() With { .X = 170.0, .Y = 70.6 }, New PointD() With { .X = 176.2, .Y = 67.2 }, New PointD() With { .X = 170.0, .Y = 69.4 }, New PointD() With { .X = 162.5, .Y = 58.2 }, New PointD() With { .X = 170.3, .Y = 64.8 }, New PointD() With { .X = 164.1, .Y = 71.6 }, New PointD() With { .X = 169.5, .Y = 52.8 }, New PointD() With { .X = 163.2, .Y = 59.8 }, New PointD() With { .X = 154.5, .Y = 49.0 }, New PointD() With { .X = 159.8, .Y = 50.0 }, New PointD() With { .X = 173.2, .Y = 69.2 }, New PointD() With { .X = 170.0, .Y = 55.9 }, New PointD() With { .X = 161.4, .Y = 63.4 }, New PointD() With { .X = 169.0, .Y = 58.2 }, New PointD() With { .X = 166.2, .Y = 58.6 }, New PointD() With { .X = 159.4, .Y = 45.7 }, New PointD() With { .X = 162.5, .Y = 52.2 }, New PointD() With { .X = 159.0, .Y = 48.6 }, New PointD() With { .X = 162.8, .Y = 57.8 }, New PointD() With { .X = 159.0, .Y = 55.6 }, New PointD() With { .X = 179.8, .Y = 66.8 }, New PointD() With { .X = 162.9, .Y = 59.4 }, New PointD() With { .X = 161.0, .Y = 53.6 }, New PointD() With { .X = 151.1, .Y = 73.2 }, New PointD() With { .X = 168.2, .Y = 53.4 }, New PointD() With { .X = 168.9, .Y = 69.0 }, New PointD() With { .X = 173.2, .Y = 58.4 }, New PointD() With { .X = 171.8, .Y = 56.2 }, New PointD() With { .X = 178.0, .Y = 70.6 }, New PointD() With { .X = 164.3, .Y = 59.8 }, New PointD() With { .X = 163.0, .Y = 72.0 }, New PointD() With { .X = 168.5, .Y = 65.2 }, New PointD() With { .X = 166.8, .Y = 56.6 }, New PointD() With { .X = 172.7, .Y = 105.2 }, New PointD() With { .X = 163.5, .Y = 51.8 }, New PointD() With { .X = 169.4, .Y = 63.4 }, New PointD() With { .X = 167.8, .Y = 59.0 }, New PointD() With { .X = 159.5, .Y = 47.6 }, New PointD() With { .X = 167.6, .Y = 63.0 }, New PointD() With { .X = 161.2, .Y = 55.2 }, New PointD() With { .X = 160.0, .Y = 45.0 }, New PointD() With { .X = 163.2, .Y = 54.0 }, New PointD() With { .X = 162.2, .Y = 50.2 }, New PointD() With { .X = 161.3, .Y = 60.2 }, New PointD() With { .X = 149.5, .Y = 44.8 }, New PointD() With { .X = 157.5, .Y = 58.8 }, New PointD() With { .X = 163.2, .Y = 56.4 }, New PointD() With { .X = 172.7, .Y = 62.0 }, New PointD() With { .X = 155.0, .Y = 49.2 }, New PointD() With { .X = 156.5, .Y = 67.2 }, New PointD() With { .X = 164.0, .Y = 53.8 }, New PointD() With { .X = 160.9, .Y = 54.4 } } Return original End Function
度数多角形もヒストグラムの一種で、データの全体的な度数分布パターンを描画するために使用されます。この多角形は、ヒストグラムのバーの上辺の中点を線分で結んで閉じた平面図形を形成することによって作成されます。FlexChart で度数多角形を作成するには、それのみを表示するかヒストグラムと一緒に表示するかに応じて、HistogramAppearance プロパティを FrequencyPolygon または HistogramAndFrequencyPolygon に設定します。このプロパティは、HistogramAppearance 列挙に含まれる値を受け取ります。FlexChart では、度数多角形の外観を変更することもできます。それには FrequencyPolygonStyle プロパティを設定します。
度数多角形 |
ヒストグラム付き度数多角形 |
---|---|
//度数多角形をヒストグラムと一緒に表示します
histogramSeries.HistogramAppearance = HistogramAppearance.HistogramAndFrequencyPolygon;
'Display a frequency polygon along with histogram
histogramSeries.HistogramAppearance = HistogramAppearance.HistogramAndFrequencyPolygon
ガウス曲線は、正規曲線とも呼ばれる釣鐘形の曲線で、連続的な確率変数の確率分布を表します。この曲線もヒストグラムの一種で、NormalCurve クラスの Visible プロパティを true に設定することによってヒストグラム上に作成できます。また、このクラスの LineStyle プロパティを設定することで、正規曲線の外観を変更できます。
//正規曲線(ガウス曲線)を作成します histogramSeries.NormalCurve.Visible = true;
'Create a normal curve or gaussian curve histogramSeries.NormalCurve.Visible = true