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();
}
}
}