본문으로 바로가기
반응형

오늘은 C#을 이용해 그래프를 그리는 방법에 대해서 포스팅을 하려고 합니다. Zedgraph라는 라이브러리를 이용해서 하는 방법인데 제가 대학교 때 Device에서 받은 값은 실시간으로 그래프를 그려주기 위해서 스터디를 했습니다. 윈도우 애플리케이션을 만들어본 적 없는 사람도 쉽게 할 수 있습니다. 우선 Zedgraph 라이브러리를 다운을 받아야 합니다. Zedgraph 라이브러리는 구글링을 통해 쉽게 다운로드할 수 있습니다.

 

우선 프로젝트에 들어가 bin에서 Debug로 들어갑니다. Debug에서 다운로드 받은 라이브러리를 추가합니다.

 

추가를 했다면 Visaul studio 우측에 있는 솔루션 탐색기에 참조를 우클릭합니다.

참초 추가를 클릭합니다.

 

참초추가를 클릭하면 위와 같은 창이 뜰 텐데 찾아보기를 클릭합니다.

 

아까 추가했던 파일 중에 Zedgraph.dll 파일을 추가합니다.

 

파일을 추가하면 참조 창에 위에 와 같이 라이브러리가 추가가 됩니다.

 

이제 디자인 탭에 들어갑니다. 왼쪽에 도구 상자에서 우클릭을 하고 항목 선택을 클릭합니다.

 

구성 요소에서 ZedGraphControl을 클릭하고 확인을 합니다. 만약에 ZedGraphControl이 없으면 찾아보기를 클릭해서 추가를 해줍니다.

도구 상자에 ZedgraphControl이 생깁니다. 이제 기본적인 Setting은 마무리되었습니다. 윈도우 폼 디자인과 소스 코드를 추가해줍니다.

 

간단한 예제를 위해서 ZedGraphControl과 버튼 3개와 타이머를 추가했습니다. 증가 버튼과 감소 버튼은 그래프의 Y값을 가변 시키기 위해 추가했고, 정지와 시작은 Timer를 Control 하기 위해서 추가했습니다.

 

소스 코드

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 ZedGraph;
 
namespace Zedgraph
{
    public partial class Form1 : Form
    {
        double x, y;           //XAxis YAxis
        LineItem line;        //라인
        PointPairList Speed;  //그래프 점.
 
        public Form1()
        {
            InitializeComponent();
 
            Zed_Timer.Start(); // Timer Start
 
            /**********그래프 설정**********/
            GraphPane MyPane = zedGraphControl1.GraphPane;
            MyPane.Title.Text = "My Zed Graph";
            MyPane.Chart.Fill = new Fill(Color.Black, Color.Black, 180.0f);
 
            /**********x축 y축 설정**********/
            MyPane.XAxis.Title.Text = "Time (1s)";
            MyPane.XAxis.Scale.MinorStep = 1;    //작은 눈금 
            MyPane.XAxis.Scale.MajorStep = 10;   //큰 눈금
            MyPane.XAxis.Scale.Min = 0;
            MyPane.XAxis.Scale.Max = 100;
            MyPane.YAxis.Title.Text = "Speed";
            MyPane.YAxis.Scale.MinorStep = 1;
            MyPane.YAxis.Scale.MajorStep = 10;
            MyPane.YAxis.Scale.Min = 0;
            MyPane.YAxis.Scale.Max = 100;
 
            /**********눈금 색**********/
            MyPane.XAxis.MajorTic.Color = Color.Orange;
            MyPane.YAxis.MajorTic.Color = Color.Orange;
 
            Speed = new PointPairList();
            line = MyPane.AddCurve("Speed Graph", Speed, Color.Orange, SymbolType.Circle);//라인
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void UP_btn_Click(object sender, EventArgs e)
        {
            y += 10;
        }
 
        private void DOWN_btn_Click(object sender, EventArgs e)
        {
            y -= 10;
        }
 
        private void STOP_btn_Click(object sender, EventArgs e)
        {
            Zed_Timer.Stop();
        }
 
        private void START_btn_Click(object sender, EventArgs e)
        {
            Zed_Timer.Start();
        }
 
        private void Zed_Timer_Tick(object sender, EventArgs e)
        {
            Speed.Add(x, y);
 
            x += 10;
            if (x > 100)
            {
                x = 0;
                Speed.Clear();
            }
            zedGraphControl1.Refresh();
        }
    }
}

위와 같이 소스코드를 참조하시면 될 것 같습니다. 그럼 이제 구동을 시켜보겠습니다.

 

잘 동작하네요. 이제 실시간 그래프를 이용해 다른 응용 프로그램을 만들 수 있겠네요.

반응형