2015년 8월 8일 토요일

C# windows Form 의 chart control 사용하기 (part 2)

 C#으로 chart 컨트롤을 사용하는 기본적인 방법에 대해서 이전 포스트에서 알아보았는데 여기에서는 여러 개의 그래프를 하나의 창에 도시하는 방법과 축의 분리에 대해서 알아보도록 하겠다.

 Chart 객체는 여러 개의 Series 그리고 한 개 이상의 ChartArea 객체를 콜렉션 멤버로 가지고 있으며 chart1.Series 와 chart1.ChartArea 같이 접근할 수 있다.

  • Series 객체는 도시할 그래프를 구성하는 점의 집합
  • ChartArea 객체는 그래프를 보여줄 영역

ChartArea는 초기에 한 개가 미리 생성되어 있고 chart1.ChartArea[0] 혹은 chart1.ChartArea[“ChartArea1”]와 같이 인덱스나 이름(문자열)로 접근할 수 있다. Series 객체도 초기에 하나가 생성되어 있으며 ChartArea[0]에 연결되어 있다. 그리고 사용자가 새로 생성되는 Series 객체는 이 default ChartArea와 자동으로 연결이 된다.

private void Form1_Load(object sender, EventArgs e)
{
   chart1.Series.Clear(); //default series를 삭제한다.
   Series series1 = chart1.Series.Add("graph1");
   series1.ChartType = SeriesChartType.Line;
   for (double k=0;k<2*Math.PI;k+=0.1)
   {
       series1.Points.AddXY(k, Math.Sin(k));
   }

   Series series2 = chart1.Series.Add("graph2");
   series2.ChartType = SeriesChartType.Line;
   for (double k = 0; k < 2 * Math.PI; k += 0.1)
   {
       series2.Points.AddXY(k, Math.Cos(k) - 2.0);
   }
}

위와 같이 생성된 Series객체 두 개 모두 ChartArea[0]로 (자동으로) 연결되며 이전 포스트에서 보여준 바와 같이 x축과 y축이 모두 공유된다.

 그런데 같은 영역의 두 그래프의 축을 분리할 수도 있다. 예를 들어 y축 스케일이 다른 두 개의 그래프를 하나의 영역에 겹쳐서 도시하고 싶다면 다음과 같이 하면 된다.

series2.YAxisType = AxisType.Secondary;

이렇게 하면 두 개의 그래프의 x축은 공통이고 분리된 y축의 스케일이 그래프 우측에 표시된다.


이 결과를 보면 그래프영역 우측의 y축에 secondary 축의 단위가 표시됨을 알 수 있다. Series.XAxisType 이나 Seires.YAxisType 프로퍼티는 별도로 지정하지 않으면 AxisType.Primary 로 자동 지정된다.

여기서 한 가지 알아두어야 할 것은 series1과 series2는 y축만 분리되었고 x축은 공통이기 때문에 다음과 같이 x축의 범위를 변경하면 둘 다 영향을 받는다는 점이다.

chart1.ChartAreas[0].AxisX.Minimum = 2.0;
chart1.ChartAreas[0].AxisX.Maximum = 4.0;


하지만 AxisY의 범위를 조절하면 series1만 영향을 받는다.

chart1.ChartAreas[0].AxisY.Minimum = -0.5;
chart1.ChartAreas[0].AxisY.Maximum = 0.5;


series2의 y축 범위를 조절하려면 다음과 같이 하면 된다.

chart1.ChartAreas[0].AxisY2.Minimum = -2.5;
chart1.ChartAreas[0].AxisY2.Maximum = -1.5;


이번에는 series2의 y축 범위만 조정되었음을 알 수 있다.

이와 같이 하나의 ChartArea에 여러 개의 Series 들을 도시할 수 있는데 각 Series의 축을 분리할 수 있으며 x축만 분리할 수도 있고 y축만 분리할 수도 있으며 둘 다 분리할 수도 있다.



댓글 없음:

댓글 쓰기