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축만 분리할 수도 있으며 둘 다 분리할 수도 있다.
'프로그래밍언어.Lib > C#' 카테고리의 다른 글
C# windows Form 의 chart control 사용하기 (part 1) (0) | 2015.08.08 |
---|---|
C# 6.0의 문자열 보간 (string interpolation) (0) | 2015.08.07 |
C#과 비주얼 스튜디오(visual studio) (0) | 2015.07.23 |