티스토리 뷰
[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 |