티스토리 뷰

목차

    반응형

    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와 AddOn 파일은 다운로드 한 뒤에 설치해주세요.


    그러면, 비주얼 스튜디오에서 별도의 조작 없이 C# MS Chart를 사용할 수 있습니다. 설치가 정상적으로 이뤄지면 아래 그림처럼 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(12), "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 Sharp MS Chart 예제 사용[C# 그래프 라이브러리] 차트


    궁금한 점은 댓글로 알려주세요.


    C# MS Chart 예제와 사용 방법 (그래프 차트)

    반응형