C#

043_TwoChart

iwannabebackendexpert 2022. 6. 9. 04:08

이전 게시물처럼 Chart 를 그리게 될껀데 위 사진 처럼 두개의 그래프를 합치기도 하고 나누어표현 하기도 하고 두가지 방법으로 chart를 표현해보자.

이전 게시물처럼 chart를 가져온다. chart는 한개만 가져오면 된다. 나중에 소스코드에서 추가할테니.

그리고 Button도 가져와서 각각 이름을 btnOneChart / btnTwoCharts로 바꾸어주었다. 나중에 버튼에 대한 이벤트를 지정할것이다.

 

Form Load시에 필요한 소스코드이다.

private void Form1_Load(object sender, EventArgs e)
        {
            chart1.Titles.Add("성적");
            chart1.Series.Add("Series2"); //원래 series1 있었음 
            chart1.Series["Series1"].LegendText = "수학"; //각각 지정
            chart1.Series["Series2"].LegendText = "영어";

            chart1.ChartAreas.Add("ChartArea2"); //Area도 원래 있었음 Area2 추가
            chart1.Series["Series2"].ChartArea = "ChartArea2"; //series2 = area2 

            Random r = new Random();
            for (int i = 0; i < 10; i++)
            {
                chart1.Series["Series1"].Points.AddXY(i, r.Next(101)); //x,y값 랜덤으로 넣어줌
                chart1.Series["Series2"].Points.AddXY(i, r.Next(101));
            }
        }

지금 form에는 chart1이 있다. 그 chart에 series1은 기본으로 들어가 있기때문에 

chart1.Series.Add("Series2"); //원래 series1 있었음

series2를 추가해준것이다. 이제 chart1(area1)하나에 series는 1,2 두개가 있는것이다. 각 시리즈에 범례를 추가해주자.

        chart1.Series["Series1"].LegendText = "수학"; // 범례 각각 지정
        chart1.Series["Series2"].LegendText = "영어";

범례는 영어로 Legend 이다.

Random r = new Random();
            for (int i = 0; i < 10; i++)
            {
                chart1.Series["Series1"].Points.AddXY(i, r.Next(101)); //x,y값 랜덤으로 넣어줌
                chart1.Series["Series2"].Points.AddXY(i, r.Next(101));
            }

AddXY로 x는 반복문의 i로 y는 0~100까지의 랜덤값으로 지정.

---------

그래프를 하나로 합치는 버튼 이벤트이다.

private void btnOneChart_Click(object sender, EventArgs e)
        {
            chart1.Series["Series2"].ChartArea = "ChartArea1"; //series2도 area1에 추가 = 합쳐짐
            chart1.ChartAreas.RemoveAt(1); //아래에 chartarea2가 있는데 없애줌 = 크게 보임 //차트 0번 1번 중 1번
            // chart1.ChartAreas.RemoveAt(chart1.ChartAreas.IndexOf("ChartArea2"));
        }

원래 Series2는 ChartArea2인데 ChartArea1에 추가하는 것이다. = 합쳐짐

그리고 RemoveAt없이 실행하면 ChartArea2 가 남아있기때문에 Area2자리가 비어있어있게되기때문에 차트인덱스
(0부터시작) 2번째인 '1번'을 지우는 것이다.

private void btnTwoCharts_Click(object sender, EventArgs e)
        {
            chart1.ChartAreas.Add("수학영역");
            chart1.Series["Series2"].ChartArea = "수학영역";
        }

ChartAreas를 통해 영역을 늘려준다. 영역을 늘려야 Area가 2개 생겨 그래프가 따로따로 들어갈수있기때문이다.

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = "Two Charts";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            chart1.Titles.Add("성적");
            chart1.Series.Add("Series2"); //원래 series1 있었음 
            chart1.Series["Series1"].LegendText = "수학"; // 범례 각각 지정
            chart1.Series["Series2"].LegendText = "영어";

            chart1.ChartAreas.Add("ChartArea2"); //Area도 원래 있었음 Area2 추가
            chart1.Series["Series2"].ChartArea = "ChartArea2"; //series2 = area2 

            Random r = new Random();
            for (int i = 0; i < 10; i++)
            {
                chart1.Series["Series1"].Points.AddXY(i, r.Next(101)); //x,y값 랜덤으로 넣어줌
                chart1.Series["Series2"].Points.AddXY(i, r.Next(101));
            }
        }

        private void btnOneChart_Click(object sender, EventArgs e)
        {
            chart1.Series["Series2"].ChartArea = "ChartArea1"; //series2도 area1에 추가 = 합쳐짐
            chart1.ChartAreas.RemoveAt(1); //아래에 chartarea2가 있는데 없애줌 = 크게 보임 //차트 0번 1번 중 1번
            // chart1.ChartAreas.RemoveAt(chart1.ChartAreas.IndexOf("ChartArea2"));
        }

        private void btnTwoCharts_Click(object sender, EventArgs e)
        {
            chart1.ChartAreas.Add("수학영역");
            chart1.Series["Series2"].ChartArea = "수학영역";
        }
    }

전체 소스코드

'C#' 카테고리의 다른 글

045_ECG,PPG(Gragh Control)  (0) 2022.06.09
044_Graph  (0) 2022.06.09
042_Chart  (0) 2022.06.09
041_Splash  (0) 2022.06.09
040_WPF Login  (0) 2022.05.20