티스토리 뷰
목차
C# MS Chart 예제와 사용 방법 (그래프 차트)
MS에서 무료로 배포하는 C# MS Chart입니다. C# MS Chart는 영역, 수직 막대, 수평 막대, 원형, 분산, 주식 전용, 피라미드, 단위 그래프를 지원합니다. C# MS Chart는 총 200여 가지 그래프를 지원한다고 하니 시간 날 때 하나씩 사용해 보며 C# MS Chart를 확실히 이해해보는 것도 좋을 듯합니다.
그리고 C# MS Chart는 사용자가 차트를 편집해 상황에 맞도록 별도로 구성할 수 있는데, 이는 C# MS Chart만의 장점이기도 합니다. C#은 각종 도구의 편집 기능을 제공하고 있기 때문이죠. 이런 C# MS Chart를 이용하기 위해선, 두 개의 파일을 다운 받아 미리 설치해야 합니다.
필요한 파일은 아래 두 개입니다.
- C# MS Chart Controls for .NET Framework 3.5
- C# MS Chart Controls for .NET Framework 3.5 Language Pack
위의 이름과 똑같은 파일을 다운 받으세요. 닷넷 프레임워크를 설치하셨다면 C# MS Chart를 사용하기 위한 추가 파일도 설치합니다.
C# MS Chart 파일 다운로드
공식 사이트 - Samples Environment for Microsoft Chart Controls [링크]
1. C# MS Chart 설치 파일 - MS Chart.exe [링크]
2. 비주얼 스튜디오 addon - MS Chart_VisualStudioAddOn.exe[링크]
[C# 그래프 라이브러리] 차트
C# MS Chart와 AddOn 파일은 다운로드 한 뒤에 설치해주세요.
그러면, 비주얼 스튜디오에서 별도의 조작 없이 C# MS Chart를 사용할 수 있습니다. 설치가 정상적으로 이뤄지면 아래 그림처럼 C# MS Chart 항목을 확인할 수 있습니다.
[C# 그래프 라이브러리] 차트
C# MS Chart 예제
저는 RS232로 전송되는 정수형 데이터를 기반으로 그래프가 실시간으로 변화하도록 구성했는데, C# MS Chart 예제 소스는 간단합니다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Threading; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; Using System.IO.Ports; namespace LineChartTEST { public partial class Form1 : Form { private delegate void CanIJust(); private List<int> _valueList; private List<double>_timeList; private List<int> _customValueList; string InputData = String.Empty; delegate void SetTextCallback(string text); SerialPort SP = new SerialPort(); public Form1() { InitializeComponent(); _valueList = new List<int>(); _timeList = new List<double>(); _customValueList = new List<int>(); SP.PortName = "COM9"; SP.BaudRate = 115200; SP.DataBits = 8; SP.Parity = Parity.None; SP.StopBits = StopBits.One; SP.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); SP.Open(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); } private void UpdateSecondChart() { chart.Series[0].Points.AddXY(_timeList[_timeList.Count - 1], _customValueList[_customValueList.Count - 1]); chart.Series[0].IsValueShownAsLabel = true; chart.Legends[0].Enabled = false; chart.Invalidate(); } private void btnClear_Click(object sender, EventArgs e) { chart.Series[0].Points.Clear(); } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { InputData = SP.ReadExisting(); if (InputData != String.Empty) { if(InputData.Length > 4) { if (String.Compare(InputData.Substring(1, 2), "P") == 0 || String.Compare(InputData, "P")== 0) { SP.WriteLine("K"); } } else if (String.Compare(InputData, "P")== 0) { } else { if (InputData.Length >= 2) { SetText(InputData.Substring(0, InputData.Length - 1)); } else { } } } } private void SetText(string text) { if (this.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { _customValueList.Add(Convert.ToInt32(text)); UpdateSecondChart(); } } private void button_Click(object sender, EventArgs e) { if (SP.IsOpen) SP.WriteLine("K"); else MessageBox.Show("Serial port is closed!"); } } } | cs |
C# MS Chart 예제에서 중요한 부분은 아래 네 줄 입니다.
1 2 3 4 | chart.Series[0].Points.AddXY(_timeList[_timeList.Count - 1], _customValueList[_customValueList.Count - 1]); chart.Series[0].IsValueShownAsLabel = true; chart.Legends[0].Enabled = false; chart.Invalidate(); | cs |
1 : chart 객체의 Series는 실제 그려지는 데이터를 의미
2 : IsValueShowAsLabel = true로 데이터의 값을 표현
3 : Legends[0].Enable = false로 라벨의 값은 표현하지 않음
4 : Invalidate()를 호출함으로서 새로 고침 계속 발생
[C# 그래프 라이브러리] 차트
궁금한 점은 댓글로 알려주세요.
C# MS Chart 예제와 사용 방법 (그래프 차트)