C#

044_Graph

iwannabebackendexpert 2022. 6. 9. 04:09

Chart를 이용하여 sin, sin(x)/x, cos(x)/x 를 그려보자.

이전 게시물들과 마찬가지로 winform으로 프로젝트 생성해주고

chart component하나만 폼 위에 올려주자. chart1이라고 되어있는 이름을 편하게 쓰기위해 ch로 이름변경.

레이아웃의 Dock또한 Fill로 바꾸어주자.

ch.ChartAreas[0].BackColor = Color.Black; // ch.ChartArea["ChartArea1"]도 가능

그래프의 배경를 검은색으로해야 멋있다.

 //x,y축 설정
            ch.ChartAreas[0].AxisX.Minimum = -20;
            ch.ChartAreas[0].AxisX.Maximum = 20;
            ch.ChartAreas[0].AxisX.Interval = 2; // x축 좌표값사이의 간격
            ch.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray; //눈금선 색깔
            ch.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //선 스타일 지정 (점선, 실선 등)

            ch.ChartAreas[0].AxisY.Minimum = -1;
            ch.ChartAreas[0].AxisY.Maximum = 1;
            ch.ChartAreas[0].AxisY.Interval = 0.2; // x축 좌표값사이의 간격
            ch.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray; //눈금선 색깔
            ch.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //선 스타일 지정 (점선, 실선 등)

AxisX,Y를 통해 x,y축을 만져주었다. 주석만 봐도 이해가 가능하다.

//Series[0]설정 = sin(x)
            ch.Series[0].ChartType = SeriesChartType.Line;
            ch.Series[0].Color = Color.LightGreen;
            ch.Series[0].BorderWidth = 2;
            ch.Series[0].LegendText = "sin(x)/x";

            // Series 추가 = sin(x) / x
            ch.Series.Add("Sin(x)/x");
            ch.Series["Sin(x)/x"].LegendText = "Sin(x) / x";
            ch.Series[1].ChartType = SeriesChartType.Line;
            ch.Series[1].Color = Color.Orange;
            ch.Series[1].BorderWidth = 2;

            // Series 추가 = cos(x) / x
            ch.Series.Add("Cos(x)/x");
            ch.Series["Cos(x)/x"].LegendText = "Cos(x) / x";
            ch.Series[2].ChartType = SeriesChartType.Line;
            ch.Series[2].Color = Color.White;
            ch.Series[2].BorderWidth = 2;

BorderWidth는 그래프 선의 굵기를 말하는 것이다.

각각의 Series들을 추가하는 코드.

 

//data추가
            for (double x = -20; x < 20; x += 0.1)
            {
                double y = Math.Sin(x);
                ch.Series[0].Points.AddXY(x, y);
                

                y = Math.Sin(x) / x;
                ch.Series[1].Points.AddXY(x, y);

                y = Math.Cos(x) / x;
                ch.Series[2].Points.AddXY(x, y);
            }

반복문을 통해 x = -20 ~ 20까지의 값을 Math 함수를 이용해 Sin,Sin(x),Cos(x)값들을 y에 표현 

private void ChartSetting()
        {
            ch.ChartAreas[0].BackColor = Color.Black; // ch.ChartArea["ChartArea1"]도 가능

            //x,y축 설정
            ch.ChartAreas[0].AxisX.Minimum = -20;
            ch.ChartAreas[0].AxisX.Maximum = 20;
            ch.ChartAreas[0].AxisX.Interval = 2; // x축 좌표값사이의 간격
            ch.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray; //눈금선 색깔
            ch.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //선 스타일 지정 (점선, 실선 등)

            ch.ChartAreas[0].AxisY.Minimum = -1;
            ch.ChartAreas[0].AxisY.Maximum = 1;
            ch.ChartAreas[0].AxisY.Interval = 0.2; // x축 좌표값사이의 간격
            ch.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray; //눈금선 색깔
            ch.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //선 스타일 지정 (점선, 실선 등)

            //Series[0]설정 = sin(x) / x
            ch.Series[0].ChartType = SeriesChartType.Line;
            ch.Series[0].Color = Color.LightGreen;
            ch.Series[0].BorderWidth = 2;
            ch.Series[0].LegendText = "sin(x)/x";

            // Series 추가
            ch.Series.Add("Sin(x)/x");
            ch.Series["Sin(x)/x"].LegendText = "Sin(x) / x";
            ch.Series[1].ChartType = SeriesChartType.Line;
            ch.Series[1].Color = Color.Orange;
            ch.Series[1].BorderWidth = 2;

            // Series 추가
            ch.Series.Add("Cos(x)/x");
            ch.Series["Cos(x)/x"].LegendText = "Cos(x) / x";
            ch.Series[2].ChartType = SeriesChartType.Line;
            ch.Series[2].Color = Color.White;
            ch.Series[2].BorderWidth = 2;

            //data추가
            for (double x = -20; x < 20; x += 0.1)
            {
                double y = Math.Sin(x);
                ch.Series[0].Points.AddXY(x, y);
                

                y = Math.Sin(x) / x;
                ch.Series[1].Points.AddXY(x, y);

                y = Math.Cos(x) / x;
                ch.Series[2].Points.AddXY(x, y);
            }
        }

전체 소스코드

'C#' 카테고리의 다른 글

046_Matching Game(그림 맞추기 게임)_C#  (0) 2022.06.09
045_ECG,PPG(Gragh Control)  (0) 2022.06.09
043_TwoChart  (0) 2022.06.09
042_Chart  (0) 2022.06.09
041_Splash  (0) 2022.06.09