C# で プロットする: ScottPlot

C#でグラフを作成するのはScottPlotを使うのが楽そうだ。

コンソールアプリ、Windows Forms, WPFなどでも使える。

割と簡単に所望のプロットが実現できた。

下はWindows フォーム アプリの例。

ScottPlot.WinForms.FormsPlotを追加した後に以下のように書いた:

using ScottPlot;

namespace PlotTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            List<LinePattern> patterns = [];
            patterns.AddRange(LinePattern.GetAllPatterns());
            patterns.Add(new([2, 2, 5, 10], 0, "Custom"));

            double[] pointX  = { 1.0, 2.0, 3.0, 4.0, 5.0 };
            double[] pointY  = { 2.0, 0.5, 3.0, 6.0, 7.0 };
            double[] pointY2 = { 5.0, 4.0, 2.0, 3.0, 4.0 };
            double[] pointY3 = { 0.0, 6.0, 2.0, 8.0, 10.0 };

            formsPlot1.Plot.Title("タイトル");
            formsPlot1.Plot.Axes.Title.Label.FontSize = 24;
            formsPlot1.Plot.Axes.Title.Label.FontName = Fonts.Detect("タイトル");

            formsPlot1.Plot.XLabel("X軸");
            formsPlot1.Plot.YLabel("値");
            formsPlot1.Plot.Axes.Left.Label.FontName = Fonts.Detect("X軸");
            formsPlot1.Plot.Axes.Bottom.Label.FontName = Fonts.Detect("Y軸");

            var sp1 = formsPlot1.Plot.Add.Scatter(pointX, pointY);
            var sp2 = formsPlot1.Plot.Add.Scatter(pointX, pointY2);
            var sp3 = formsPlot1.Plot.Add.Scatter(pointX, pointY3);
            sp1.LineWidth = 2;
            sp1.MarkerSize = 4;
            sp1.LegendText = "漢字";
            sp2.LineWidth = 3;
            sp2.LinePattern = patterns[1];
            sp2.LegendText = "ふが";
            sp3.LineWidth = 3;
            sp3.MarkerSize = 10;
            sp3.LinePattern = patterns[2];
            sp3.LegendText = "ほげ";
            var legend = formsPlot1.Plot.Legend;
            legend.FontName = Fonts.Detect("漢字");
            legend.FontSize = 18;
            formsPlot1.Plot.Axes.Bottom.TickLabelStyle.FontSize = 18;
            formsPlot1.Plot.Axes.Left.TickLabelStyle.FontSize = 20;
            formsPlot1.Plot.ShowLegend();
        }
    }
}