SPREAD for Windows Forms/ASP.NET 10.0Jの新機能紹介(その6)

こんにちは!SPREADチームでWindows Formsを担当している大林です。
今日は、グラフについてお話ししたいと思います。

Excel 2016では、新しいグラフとして、ツリーマップ、サンバースト、ヒストグラム、パレート図、箱ひげ図、ウォーターフォール、じょうごが追加されました。SPREADも、10.0Jでこれらのグラフ(SPREADでは「チャート」と呼称)に対応しました。今日は、その中から「パレート図」をご紹介したいと思います。

さて、この「パレート図」、QC(Quality Control:品質管理)の7つ道具の一つといわれるそうです。製造業に関わる皆さまにはお馴染みのグラフかもしれませんね。

例えば、ある製品に対する苦情件数をあつかう場合、横軸に苦情を件数順に並べ、縦軸に件数と件数の累積百分率をプロットします(以下、画像はSPREAD)。

ozu20170613_1

こうしてプロットすると、どの項目が、全体に対してどのくらいの影響をもつか把握するのに役立ちます。
パレートの法則(全体の数値の80%は、全体を構成するうちの20%の要素が生み出している – 80:20の法則でピンとくる方も多いかもしれません)に基づいたプロット方法です。

パレート図を用いた分析手法では、累積比率が80%までの項目を、影響度が高いと判断することが一般的な基準の一つのようです。この考え方に基づき、上で挙げた製品の「性能」と「機能」を改善した結果、それぞれの苦情が1/3、および半分に減少したとします(現実はなかなかこの様にはいかないと思いますが)。再度、パレート図を描きます。

ozu20170613_2

改善前後の2つのパレート図を比較して改善の効果を評価します。
そうして、改善後のパレート図をもとに再び改善…を繰り返して、全体を改善の方向に進めることを試みます。

様々な問題を抱えて、どこから手をつければ良いか分からない…こんなときに効果がありそうな手法ですね。

なお、SPREADの強みであるExcelとの互換性は、チャートも例外ではありません。
上のパレート図をExcelにエクスポートすると、次のような結果となります。

ozu20170613_3
※パレート図を表示するには、エクスポートされたファイルをExcel 2016で開いてください。

以下、SPREADでパレート図を作成するサンプルコードをご紹介します。
機会があれば、ぜひご活用ください!

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 ' シートにデータを設定
FpSpread1.ActiveSheet.SetClip(0, 0, 1, 2, "機能" & vbTab & "90")
FpSpread1.ActiveSheet.SetClip(1, 0, 1, 2, "デザイン" & vbTab & "68")
FpSpread1.ActiveSheet.SetClip(2, 0, 1, 2, "性能" & vbTab & "93")
FpSpread1.ActiveSheet.SetClip(3, 0, 1, 2, "マニュアル" & vbTab & "23")
FpSpread1.ActiveSheet.SetClip(4, 0, 1, 2, "サポート" & vbTab & "17")
FpSpread1.ActiveSheet.SetClip(5, 0, 1, 2, "不具合" & vbTab & "4")
FpSpread1.ActiveSheet.SetClip(6, 0, 1, 2, "その他" & vbTab & "2")
FpSpread1.ActiveSheet.SetClip(7, 0, 1, 2, "相互運用性" & vbTab & "1")
 ' セル範囲を設定してパレート図を作成します
FpSpread1.ActiveSheet.AddChart(New FarPoint.Win.Spread.Model.CellRange(0, 0, 8, 2), GetType(FarPoint.Win.Chart.ParetoSeries), 500, 250, 150, 30)
Dim model As FarPoint.Win.Chart.ChartModel = FpSpread1.ActiveSheet.Charts(0).Model
 ' タイトルを設定
Dim fontTitle As New Font("メイリオ", 14)
model.LabelAreas.Add(New FarPoint.Win.Chart.LabelArea() With {.Text = "問合せ件数", .TextFont = fontTitle, .Location = New PointF(0.4F, 0.01F)})
 ' 凡例を表示しない
model.LegendAreas.Clear()
Dim s As FarPoint.Win.Chart.ParetoSeries = DirectCast(model.PlotAreas(0).Series(0), FarPoint.Win.Chart.ParetoSeries)
 ' 要素の間隔を指定
s.GapWidth = 0.1F
 ' パレート線の外観を設定
s.ParetoLine.LineBorder = New FarPoint.Win.Chart.SolidLine(System.Drawing.Color.OrangeRed, 3)
 ' 軸のフォントを設定 
Dim plotArea As FarPoint.Win.Chart.YPlotArea = DirectCast(model.PlotAreas(0), FarPoint.Win.Chart.YPlotArea)
Dim fontRegular As New Font("メイリオ", 9)
plotArea.XAxis.LabelTextFont = fontRegular
plotArea.XAxis.LabelRotationAngle = -45
plotArea.YAxes(0).LabelTextFont = fontRegular
plotArea.YAxes(1).LabelTextFont = fontRegular
 ' 数値縦軸の最大値を設定
plotArea.YAxes(0).AutoMaximum = False
plotArea.YAxes(0).Maximum = 100
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 ' Excelにエクスポート
FpSpread1.SaveExcel("c:\temp\TestPareto.xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat)
End Sub

C#

private void Form1_Load(object sender, EventArgs e)
{
// シートにデータを設定
fpSpread1.ActiveSheet.SetClip(0, 0, 1, 2, "機能\t90");
fpSpread1.ActiveSheet.SetClip(1, 0, 1, 2, "デザイン\t68");
fpSpread1.ActiveSheet.SetClip(2, 0, 1, 2, "性能\t93");
fpSpread1.ActiveSheet.SetClip(3, 0, 1, 2, "マニュアル\t23");
fpSpread1.ActiveSheet.SetClip(4, 0, 1, 2, "サポート\t17");
fpSpread1.ActiveSheet.SetClip(5, 0, 1, 2, "不具合\t4");
fpSpread1.ActiveSheet.SetClip(6, 0, 1, 2, "その他\t2");
fpSpread1.ActiveSheet.SetClip(7, 0, 1, 2, "相互運用性\t1");
// セル範囲を設定してパレート図を作成します
fpSpread1.ActiveSheet.AddChart(new FarPoint.Win.Spread.Model.CellRange(0, 0, 8, 2), typeof(FarPoint.Win.Chart.ParetoSeries), 500, 250, 150, 30);
FarPoint.Win.Chart.ChartModel model = fpSpread1.ActiveSheet.Charts[0].Model;
// タイトルを設定
Font fontTitle = new Font("メイリオ", 14);
model.LabelAreas.Add(new FarPoint.Win.Chart.LabelArea() { Text = "問合せ件数", TextFont = fontTitle, Location = new PointF(0.4F, 0.01F) });
// 凡例を表示しない
model.LegendAreas.Clear();
FarPoint.Win.Chart.ParetoSeries s = (FarPoint.Win.Chart.ParetoSeries)model.PlotAreas[0].Series[0];
// 要素の間隔を指定
s.GapWidth = 0.1f;
// パレート線の外観を設定
s.ParetoLine.LineBorder = new FarPoint.Win.Chart.SolidLine(System.Drawing.Color.OrangeRed, 3);
// 軸のフォントを設定 
FarPoint.Win.Chart.YPlotArea plotArea = (FarPoint.Win.Chart.YPlotArea)model.PlotAreas[0];
Font fontRegular = new Font("メイリオ", 9);
plotArea.XAxis.LabelTextFont = fontRegular;
plotArea.XAxis.LabelRotationAngle = -45;
plotArea.YAxes[0].LabelTextFont = fontRegular;
plotArea.YAxes[1].LabelTextFont = fontRegular;
// 数値縦軸の最大値を設定
plotArea.YAxes[0].AutoMaximum = false;
plotArea.YAxes[0].Maximum = 100;
}
private void button1_Click(object sender, EventArgs e)
{
// Excelにエクスポート
fpSpread1.SaveExcel(@"c:\temp\TestPareto.xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
}
\  この記事をシェアする  /