ScottPlot Multi Axis 그리기 - C#

Software/C#|2024. 1. 18. 09:19
반응형

ScottPlot 가 버젼 5로 업데이트 되고 사용하는 방법이나 함수가 많이 변경이 된듯 합니다. 

이번 포스팅에서는 버젼 5를 기준으로 멀티 축을 그리는 방법에 대한 코드를 공유합니다. 

 

MultiAxis.zip
0.13MB

        (소스 코드)

    public partial class Form1 : Form
    {
        private ScottPlot.AxisPanels.RightAxis? YRight2 = null;  // 오른쪽 Y축 추가 
        private ScottPlot.AxisPanels.LeftAxis? YLeft2 = null;    // 왼쪽 Y축 추가 

        public Form1()
        {
            InitializeComponent();
            graphInit();
        }
        private void graphInit()
        {
            YLeft2 = formsPlot1.Plot.Axes.AddLeftAxis();        // 폼 디자인에 올려진 그래프 컨트롤에 왼쪽축을 추가하고 맵핑시킨다. 
            YRight2 = formsPlot1.Plot.Axes.AddRightAxis();      // 폼 디자인에 올려진 그래프 컨트롤에 오른쪽축을 추가하고 맵핑시킨다. 

            formsPlot1.Plot.Axes.Left.Label.Text = "Power";   // 기존 왼쪽 축의 항목을 설정 
            formsPlot1.Plot.Axes.Left.Label.ForeColor = Colors.Red;
            formsPlot1.Plot.Axes.Right.Label.Text = "Voltage";    // 기존 오른쪽 축의 항목을 설정 
            formsPlot1.Plot.Axes.Right.Label.ForeColor = Colors.Green;

            YLeft2.Label.Text = "SE";                           // 추가된 왼쪽 축의 항목을 설정 
            YLeft2.Label.ForeColor = Colors.Blue;
            YRight2.Label.Text = "RD";                          // 추가된 오른쪽 축의 항목을 설정 
            YRight2.Label.ForeColor = Colors.Purple;

            formsPlot1.Plot.Axes.Bottom.Label.Text = "Current"; // Bottom 축의 항목을 설정 
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double[] dataX = { 0, 1, 2, 3, 4, 5};
            double[] dataLeftY1 = { 0, 10, 100, 300, 500, 800};
            double[] dataLeftY2 = { 0.1, 0.24, 1, 2, 2.1, 2.1};
            double[] dataRightY1 = { 0, 2, 2.1, 2.2, 2.3, 2.4};
            double[] dataRightY2 = { 100, 10, 5, 5.1, 5.2, 5.1 };

            var sigLeft1 = formsPlot1.Plot.Add.SignalXY(dataX, dataLeftY1, Colors.Red);       // 시그널 생성
            var sigLeft2 = formsPlot1.Plot.Add.SignalXY(dataX, dataLeftY2, Colors.Blue);
            var sigRight1 = formsPlot1.Plot.Add.SignalXY(dataX, dataRightY1, Colors.Green);
            var sigRight2 = formsPlot1.Plot.Add.SignalXY(dataX, dataRightY2, Colors.Purple);

            sigLeft1.Axes.YAxis = formsPlot1.Plot.Axes.Left;            // 시그널과 축을 맵핑 
            sigLeft2.Axes.YAxis = YLeft2!;
            sigRight1.Axes.YAxis = formsPlot1.Plot.Axes.Right;
            sigRight2.Axes.YAxis = YRight2!;

            graphScale(6, 1000, 4, 5, 100);   // 그래프 스케일 조정 
        }

        private void graphScale(double X_Axis, double Y_Left1, double Y_Left2, double Y_Right1, double Y_Right2)
        {
            formsPlot1.Plot.Axes.Bottom.Min = 0;
            formsPlot1.Plot.Axes.Bottom.Max = X_Axis;

            formsPlot1.Plot.Axes.Left.Min = 0;
            formsPlot1.Plot.Axes.Left.Max = Y_Left1;

            formsPlot1.Plot.Axes.Right.Min = 0;
            formsPlot1.Plot.Axes.Right.Max = Y_Right1;

            YLeft2!.Min = 0;
            YLeft2!.Max = Y_Left2;

            YRight2!.Min = 0;
            YRight2!.Max = Y_Right2;

            formsPlot1.Refresh();       // 그래프 갱신
        }
    }

 

 

출력결과 표시

 

반응형

댓글()