반응형
안녕하세요.
코딩하는남자 입니다
이번 블로그 내용은 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 |