히포차트로 ParetoChart(파레토 차트)를 그리는 팁을 알아봅니다.




 이번 강좌에서는 품질관리, 불량률 관리, 재고관리 등에서 사용하는 파레토 차트(Pareto Chart)를 한 번 그려보겠습니다. 파레토 차트란 위에서 보시는 바와 같이 해당 값을 컬럼 차트로 그리고 누적값에 대한 백분율을 라인으로 그려주는 차트를 말합니다.

 이 강좌는 히포차트로 파레토 차트를 그리는 하나의 팁을 알려주기 위함이고, 품질관리, 공정관리, 구매관리, 불량품관리 등과 관련된 프로젝트를 진행하는 분들에게 도움이 되리라 생각합니다.

 [적용 버전]
  베타 2.0 이상 

 [시나리오]
 
  1. 컬럼 차트를 이용해 각 항목(제품, 불량항목 등)을 그린다.
  2. 각 항목들의 누적 합을 차례로 구하면서 그 누적백분율을 라인 차트로 다시 그려준다.

중요 코드 설명

(1) 컬럼 차트 그리기
 - 우선 아래와 같이 각 항목을 나타내는 컬럼 차트를 그립니다. 이는 불량률이 될 수도 있겠고, 재고률이 될 수도 있겠습니다.


(2) 누적 백분율 라인 그리기
 - 이 부분이 핵심이 되겠네요. 누적 백분율을 구하기 위해서는 위에서 입력된 항목 들의 값을 하나씩 더해가면서 총 합에 대한 백분율을 구해야 되므로 위에서 처럼 DrawChart()로 한 번 그린 후에 다음과 같은 코드를 삽입해주시면 되겠습니다. 한 번 그려준 후에 라인을 추가하는 이유는 그린 후에야 각종 총 합, 최대 단위값 등이 모두 계산되기 때문입니다. 

 아래 코드는 시리즈를 라인으로 하나를 만들고 위 컬럼 차트를 한 번 그린 후 계산된 최대단위값과 총합을 이용해서 누적 백분율 값을 구하는 핵심 부분입니다. 아래 percent는 실제 퍼센트 값을 구하는 부분이고 각 마커에 들어갈 글자를 위해 작성한 부분이고 그 위에 item2.YValue에 들어가는 값에는 UnitSpan 이라는 값이 곱해 지고 있는데 이는 차트의 축에 맞게 길이를 맞춰 주는 작업이 되겠습니다. 




 공통 적용되는 코드이므로 작성하시는 프로젝트에 그대로 붙여 넣고 실행해 보시거나 아래 전체 소스를 그대로 실행해 보시면 될 듯하고 추가되는 코드의 이해 없이 그대로 사용하셔도 무방하겠습니다.


C# 전체 코드 보기

 
            SeriesList sList = new SeriesList();
            sList.ChartType = ChartType.Column;

            Series sr = new Series();
            sr.SeriesColor = Color.Blue;
            sr.Column.WidthType = ColumnWidthType.Tight;
 
            Random r = new Random();
            for (int x = 0; x < 7; x++)
            {
                SeriesItem item = new SeriesItem();
                item.YValue = 5000 - x * 750;
                item.Name = "item" + x.ToString();

                sr.items.Add(item);
            }

            sList.SeriesCollection.Add(sr);

            this.hHippoChart1.Titles.Label.ForeColor = Color.SteelBlue;
            this.hHippoChart1.DesignType = ChartDesignType.Simple;
            this.hHippoChart1.SeriesListDictionary.Add(sList);
            this.hHippoChart1.Titles.Label.Text = "Pareto Chart"; 
            this.hHippoChart1.DrawChart();

            Series sr2 = new Series();
            sr2.SeriesColor = Color.Red;

            sr2.ChartType = ChartType.Line;
            sr2.Line.LineWidth = 2;
            sr2.Points.Width = 6;
            sr2.Points.PointType = PointType.FillCircle;

            // [최대 단위값]
            // 아래 코드에서 item2.YValue 에 비율을 넣을때 곱해주어 축의 균형을 맞춘다.
            double UnitSpan = this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.MaxUnitValue;

            // 총 항목들의 합
            float Sum = (float)this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.AnalysisItems[AnalysisCategory.Sum].Value;
 
            // 누적되면서 계속 더해지는 값
            float SumPart = 0;

            foreach (SeriesItem item in sr.items)
            {
                SumPart += item.YValue;

                SeriesItem item2 = new SeriesItem();
                item2.YValue = (float)(SumPart * UnitSpan / Sum);
                item2.Name = item.Name;

                // 마커에 표시할 퍼센트 글자를 위해 구한 값
                float percent = (float)(SumPart * 100 / Sum);

                // 퍼센트 마커 추가
                AxisMarker mk = new AxisMarker(Math.Round(percent, 0) + "%", item2.YValue);
                mk.Line.LineColor = Color.Gray;
                mk.Line.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
                mk.Label.ForeColor = Color.Gray;
                mk.TextFormat.Alignment = StringAlignment.Far;
                mk.LegendVisible = false;

                this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.Markers.Add(mk);

                sr2.items.Add(item2);
            }

            this.hHippoChart1.SeriesListDictionary[0].SeriesCollection.Add(sr2);
            this.hHippoChart1.DrawChart();


VB 코드 전체 보기

더보기




※ 엑셀 사용자, 일반 사용자 분들은 자재과 최대리의 '뉴간트메이커' 활용법 참고하시기 바랍니다.

뉴간트메이커 소개 보기
사업자 정보 표시
히포차트 | 하영대 | 경기도 성남시 수정구 복정동 631-5 401 | 사업자 등록번호 : 129-34-55719 | TEL : 031-751-6673 | Mail : hippochart@gmail.com | 통신판매신고번호 : 제 2010-경기성남-1203호 | 사이버몰의 이용약관 바로가기

Posted by 리바이 병장

댓글을 달아 주세요



/* 다음 웹인사이드 로그 분석*/