-
[C#] C#으로 MS차트 작성하기취미생활/C# 2019. 6. 11. 16:09반응형
안녕하세요.
코딩하는남자 입니다
이번 블로그 내용은 C#을 통해 차트를 작성할경우 보통 상용 API를 통해 구현하게 되는데요
저희 같은 서민들은 그걸 구입할 돈이 없지요ㅋ
그래서 열심히 인터넷 검색을 통해서 무료로 사용할 수 있는 차트가 있어서 소개해 드릴려고 합니다
마도 MS Chart 인데요.
비쥬얼스튜디오에서 개발하는 C#에서 사용하기 참 좋은 API라고 생각합니다
혹시 자체 개발을 통해 어떠한 통계나 수치를 표현하고 싶으시면 한번 시도해 보시면 좋을거 같습니다
C#으로 구현하기 위해 간단한 예제를 같이 올려 드리니 분석 해서 나만의 차트를 구현해 보시기 바랍니다
[Souce Code]
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using System.Diagnostics; namespace MSChart_Controls_Test{ public partial class Form1 : Form { Chart chart = null; public Form1() { InitializeComponent(); ChartDataInput(); } private void ChartDataInput() { //x,y축에 사용될 값을 먼저 준비 한다 //x축 값 string[] xValues1 = { "Korea", "Frence", "Canada", "Germany", "Italy" }; //y축 값 double[] yValues1 = { 67.66, 89.57, 82.44, 85.24, 87.93 }; double[] yValues2 = { 77.66, 89.57, 92.44, 95.24, 97.93 }; //차트를 변수에 담아주고 chart = this.chart1; //계열을 초기화 처음에 Series1이 기본으로 들어가기 때문에 삭제해 준다 chart.Series.Clear(); //계열을 새로 생성해서 Series s1 = new Series("international"); Series s2 = new Series("International2"); //계열을 추가해 준다 chart.Series.Add(s1); chart.Series.Add(s2); //추가된 계열에 값을 넣어준다 //x축 값은 하나만 있으면 되기 때문에 처음부터 데이터를 하나만 준비한다 //만약 s2애 x축값도 만들어서 DataBindXY로 값을 넣어도 x축은 변경되지 않는다 //한번설정하면 Y축은 값이 변경되어도 X축은 값이 변경되지 않는다 s1.Points.DataBindXY(xValues1, yValues1); s2.Points.DataBindY(yValues2); //차트타입을 막대로 한다 s1.ChartType = SeriesChartType.Column; //범례를 보여준다 chart.Legends[0].Enabled = true; //테두리선굵기 (선종류로 해야 차이가 나타난다) s1.BorderWidth = 12; //색 변경 s1.Color = Color.OrangeRed; //계열에 값표시 s1.IsValueShownAsLabel = true; //계열에 그라데이션을 준다 s1.BackGradientStyle = GradientStyle.VerticalCenter; s2.BackGradientStyle = GradientStyle.Center; //아래 두줄을 풀변 상하 이중축이되고 //s1.XAxisType = AxisType.Primary; //기본축 //s2.XAxisType = AxisType.Secondary; //보조축 //아래 두줄을 풀면 좌우 이중축이된다 //s1.YAxisType = AxisType.Primary; //s2.YAxisType = AxisType.Secondary; //차트의 테두리선을 붉은색의 연결된 선으로 그리는데 선의 넓이는 1이다 chart.BorderlineColor = Color.Red; chart.BorderlineDashStyle = ChartDashStyle.Solid; chart.BorderlineWidth = 1; //차트의 내부 테두리 선을 파란색의 연결된 선으로 그리는데 선의 넓이는 1이다 chart.ChartAreas[0].BorderColor = Color.Blue; chart.ChartAreas[0].BorderDashStyle = ChartDashStyle.Solid; chart.ChartAreas[0].BorderWidth = 1; //차트의 내부 테두리 선을 변경 chart.ChartAreas[0].AxisX.LineColor = Color.Blue; chart.ChartAreas[0].AxisY.LineColor = Color.Blue; //chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False; //chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.False; //차트의 배경 격자선을 변경 chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Blue; chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Blue; chart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; chart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; //차트의 외부로 삐져나온 선을 변경 chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = Color.Red; chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = Color.Red; chart.ChartAreas[0].AxisX.MajorTickMark.Enabled = false; chart.ChartAreas[0].AxisY.MajorTickMark.Enabled = false; //첫번재 계열의 네번째 그래프만 파란색으로 변경 s1.Points[4].Color = Color.Blue; } private void ChartDataInput2() { //차트를 변수에 담아놓고 chart = this.chart1; //계열도 변수에 담는다 Series series1 = new Series("Test"); Series series2 = new Series("Test2"); //xValue를 준비 string[] xValue = { "국어","영어","수학" }; //계열을 초기화 chart.Series.Clear(); //계열을 추가 chart.Series.Add(series1); chart.Series.Add(series2); //계열을 변수에 담지 않고 이렇게 바로 추가해도 된다 //그러나 계열을 이렇게 선언하면 아래처럼 series1변수로 접근하지 못하고 chart.series[0] 또는 //chart.series["Test"] 이렇게 접근해야 한다 //chart.Series.Add("Test"); //chart.Series.Add("Test2"); //테두리선굵기 (선종류로 해야 차이가 나타난다) series1.BorderWidth = 12; //색 변경 series1.Color = Color.OrangeRed; //차트 모양을 막대로 지정 series1.ChartType = SeriesChartType.Column; series2.ChartType = SeriesChartType.Column; //테스트 계열에 값을 세개 추가 series1.Points.AddY(21.7); series1.Points.AddY(20); series1.Points.AddY(18.5); //테스트2 계열에 값을 세개 추가 series2.Points.AddY(22.4); series2.Points.AddY(19.2); series2.Points.AddY(23.8); } private void button1_Click(object sender, EventArgs e) { //차트를 변수에 담아놓고 chart = this.chart1; //차트 모양을 꺽은선으로 변경 if (chart.Series[0].ChartType == SeriesChartType.Column) { chart.Series[0].ChartType = SeriesChartType.FastLine; chart.Series[1].ChartType = SeriesChartType.FastLine; } else { chart.Series[0].ChartType = SeriesChartType.Column; chart.Series[1].ChartType = SeriesChartType.Column; } } private void button2_Click(object sender, EventArgs e) { //차트를 변수에 담아놓고 chart = this.chart1; //원통형으로 변경 chart.Series[1].CustomProperties = "DrawingStyle=Cylinder"; //3D chart.ChartAreas[0].Area3DStyle.Enable3D = !(chart.ChartAreas[0].Area3DStyle.Enable3D); } private void button3_Click(object sender, EventArgs e) { //범례를 보여줬다가 안보여줬다가 한다 this.chart1.Legends[0].Enabled = !(this.chart1.Legends[0].Enabled); } private void button4_Click(object sender, EventArgs e) { //첫번째 계열을 순환 하면서 가장 큰 계열의 색을 검은색으로 변경한다 int point = 0; int yvalue = 0; for (int i = 0; i < this.chart1.Series[0].Points.Count; i++) { Debug.Print(this.chart1.Series[0].Points[i].YValues[0].ToString()); if (yvalue < (int)this.chart1.Series[0].Points[i].YValues[0]) { point = i; yvalue = (int)this.chart1.Series[0].Points[i].YValues[0]; } } this.chart1.Series[0].Points[point].Color = Color.Black; } } }
붙여넣기를 햇더니 코드가 많이 엉망이 됐네요ㅎㅎ
나중에 시간내서 정리하도록 하겠습니다~
그럼 코딩하는남자 였습니다~!
반응형'취미생활 > C#' 카테고리의 다른 글
[C#]MX Component V4를 이용한 통신 (0) 2019.06.12 [C#] 미쯔비시 PLC와 통신하기 위한 GX Works2설정 (0) 2019.06.12 [C#] 오라클 컨넥션 만들기!! (0) 2019.06.12 [C#] 엑셀파일 내보내기(그리드뷰) (0) 2019.06.12 [C#] QR코드 생성 해보기!! (1) 2019.06.11