티스토리 뷰

VS-02분반수업

VP(22-05-25)

choimyeongheon 2022. 5. 25. 11:59

[1]chart를 사용하여 sin(x)그려보기

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace _37_graph
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = "Graph using Chart Control";
            
        }
        //어떤 이벤트가 생기면 거기에 대응하여(on족 함수) 이벤트처리함수 ex:)창에 변화가있을 때
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            chart1.ChartAreas[0].BackColor = Color.Black;
            //x,y축 설정
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 20;
            chart1.ChartAreas[0].AxisX.Interval = 1;//그리드간격은 2
            chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            chart1.ChartAreas[0].AxisY.Minimum = -0.4;
            chart1.ChartAreas[0].AxisY.Maximum = 1;
            chart1.ChartAreas[0].AxisY.Interval = 0.2;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            //series 설정
            if(chart1.Series.Count == 1)
            {
                chart1.Series[0]/*series["series1"]*/.ChartType = SeriesChartType.BoxPlot;
                chart1.Series[0].Color = Color.HotPink;
                chart1.Series[0].BorderWidth = 2;
                chart1.Series[0].LegendText = "sin(x)/x";
              
            }
            

            //data insert to series
            for (double x = -20; x < 20; x += 0.1)
            {

                double y = Math.Sin(x) / x;
                chart1.Series[0].Points.AddXY(x, y);
                y = Math.Cos(x) / x;
                chart1.Series[1].Points.AddXY(x, y);
                /*
                y = Math.Tan(x) / x;
                chart1.Series[2].Points.AddXY(x, y);
                */

                
            }

        }
    }
}

Form의 title을 graph using chart control로 바꿔주면서 시작하였다.

//어떤 이벤트가 생기면 거기에 대응하여(on족 함수) 이벤트처리함수 ex:)창에 변화가있을 때
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            chart1.ChartAreas[0].BackColor = Color.Black;
            //x,y축 설정
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = 20;
            chart1.ChartAreas[0].AxisX.Interval = 1;//그리드간격은 2
            chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            chart1.ChartAreas[0].AxisY.Minimum = -0.4;
            chart1.ChartAreas[0].AxisY.Maximum = 1;
            chart1.ChartAreas[0].AxisY.Interval = 0.2;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

override된 함수 OnPaint를 설정해준다.

함수명이 On으로 시작한다면 어떤 이벤트에 대응하여 실행되는 함수이다. [안드로이드의 onCreate와 비슷하게 동작하는 것 같다.]

chart1.ChartAreas의 첫번째 Area인 ChartArea1을 설정하는 부분이다.

paintEventArgs e에 기반을 두어 실행된다.

Area1의 배경색은 black으로 설정하고 x축의 최소값은 0 최대값은 20으로 설정해준다.

x값들의 간격을 1로, 메이저그리드의 linecolor=gray로 LineDashStyle = ChartDashStyle.Dash로 설정해준다.

y값의 최소최대를 -0.4~1로 간격을 0.2로 컬러와 스타일은 x값들과 같게 설정해준다.

 

//series 설정
            if(chart1.Series.Count == 1)
            {
                chart1.Series[0]/*series["series1"]*/.ChartType = SeriesChartType.BoxPlot;
                chart1.Series[0].Color = Color.HotPink;
                chart1.Series[0].BorderWidth = 2;
                chart1.Series[0].LegendText = "sin(x)/x";
              
            }

if를 쓸 필요는 없지만 

series가 한개일 때만 실행되게끔 하였다. 내용은 series의 첫번째 값인 series1의 chartType을 Boxplot으로 해주었다.

색깔은 HotPink로 선굵기는 2 범례텍스트는 sin(x)/x로 설정해주었다.

 

//data insert to series
            for (double x = -20; x < 20; x += 0.1)
            {

                double y = Math.Sin(x) / x;
                chart1.Series[0].Points.AddXY(x, y);
                
            }

총 400번의 루프를 실행하고 

double y를 Math.Sin(x)/x로 값을 설정해준다.

series1의 포인트를 방금 설정한 x,y를 기반으로 AddXY함수를 사용하여 지정해준다.

 

실행하면 이와같은 차트가 띄워지게 된다.

 

 


[2]차트를 사용하여 cos(x)와 sin(x)의 값을 출력하기

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace _037_chart3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = "Graph using Chart Control";
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            chart1.ChartAreas[0].BackColor = Color.Black;
            //x,y축 설정
            chart1.ChartAreas[0].AxisX.Minimum = -20;
            chart1.ChartAreas[0].AxisX.Maximum = 20;
            chart1.ChartAreas[0].AxisX.Interval = 2;//그리드간격은 2
            chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            chart1.ChartAreas[0].AxisY.Minimum = -4;
            chart1.ChartAreas[0].AxisY.Maximum = 4;
            chart1.ChartAreas[0].AxisY.Interval = 0.4;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
            chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;




            //series 설정
            

            if (chart1.Series.Count == 1)
            {
                chart1.Series[0]/*series["series1"]*/.ChartType = SeriesChartType.Line;
                chart1.Series[0].Color = Color.HotPink;
                chart1.Series[0].BorderWidth = 2;
                chart1.Series[0].LegendText = "sin(x)/x";

                chart1.Series.Add("Cos");
                chart1.Series[1].ChartType = SeriesChartType.Line;
                chart1.Series[1].Color = Color.Orange;
                chart1.Series[1].BorderWidth = 2;
                chart1.Series[1].LegendText = "cos(x)/x";
                /*
                chart1.Series.Add("tan");
                chart1.Series[2].ChartType = SeriesChartType.Line;
                chart1.Series[2].Color = Color.HotPink;
                chart1.Series[2].BorderWidth = 2;
                chart1.Series[2].LegendText = "tan(x)/x";
                */


            }


            //data insert to series
            for (double x = -20; x < 20; x += 0.1)
            {

                double y = Math.Sin(x) / x;
                chart1.Series[0].Points.AddXY(x, y);

                y = Math.Cos(x) / x;
                chart1.Series[1].Points.AddXY(x, y);
                /*
                y = Math.Tan(x) / x;
                chart1.Series[2].Points.AddXY(x, y);
                */


            }

        }
    }
}

기본 설정은 위와 같고

x,y의 maximum과 minimum에 변화를 주었다.

chart1.Series.Add("Cos");
                chart1.Series[1].ChartType = SeriesChartType.Line;
                chart1.Series[1].Color = Color.Orange;
                chart1.Series[1].BorderWidth = 2;
                chart1.Series[1].LegendText = "cos(x)/x";

이번엔 Cos(x)를 나타내기 위해 series를 추가해줄 것이다.

새로 추가한 series의 설정은 seriestype을 Line형식으로 설정해준다([1]번 프로젝트와는 다르게 sin도 Line형식으로 설정해주었다.)

series1의 color은 orange로 굵기는 같게 2로 설정해준다.

범례텍스트는 cos(x)/x로 해준다.

		double y = Math.Sin(x) / x;
                chart1.Series[0].Points.AddXY(x, y);

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

[1]번 프로젝트에서 설정했던것 처럼 Cos에 대한 series를 똑같이 설정해준다.

 

실행결과는 위와 같다.

 

감사합니다.

'VS-02분반수업' 카테고리의 다른 글

VP(22-06-02)  (0) 2022.06.08
VP(22-05-27)  (0) 2022.05.30
VP(22-05-20)  (0) 2022.05.24
VP02(22-05-13)  (0) 2022.05.17
VP02(22-05-11)  (0) 2022.05.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함