積み上げ折れ線グラフ
積み上げ折れ線グラフは、プリミティブ図形をプロット上で組み合わせることで実現できます。
ScottPlot.Plot myPlot = new();
// 各線の値を準備する
double[] values1 = [8.4, 6.9, 6.5, 4.4];
double[] values2 = [7.9, 6.6, 6.4, 6.2];
double[] values3 = [6.2, 7.3, 5.5, 3.7];
// 各線の値を保持するコレクションを作成する
double[][] allValues = [values1, values2, values3];
// 各点を2回格納することで、各線のステップ点を計算する
double[] runningSum = new double[values1.Length];
for (int i = 0; i < allValues.Length; i++)
{
// 積み上げ効果を実現するために、実行合計の上に値を追加する
runningSum = DataOperations.SumVertically([runningSum, allValues[i]]);
List<Coordinates> points = [];
for (int j = 0; j < runningSum.Length; j++)
{
points.Add(new(j, runningSum[j]));
points.Add(new(j + 1, runningSum[j]));
}
// 線を表示するために、点をそのままプロットする
Coordinates[] lineCoordinates = [.. points];
// 開始点と終了点を追加する
points.Add(new(points.Last().X, 0));
points.Add(new(points.First().X, 0));
Coordinates[] fillCoordinates = [.. points];
// ポリゴンを追加し、その上に線を重ねる
var line = myPlot.Add.ScatterLine(lineCoordinates);
line.Color = ScottPlot.Palette.Default.GetColor(i);
line.LineWidth = 2;
var poly = myPlot.Add.Polygon(fillCoordinates);
poly.FillColor = line.Color.Lighten(.5);
poly.LineWidth = 0;
}
// すべての順序を反転し、最小のポリゴン
// (最初に追加されたもの)が上に表示され、最後に描画されるようにする
myPlot.PlottableList.Reverse();
// データとプロット端の間のパディングを防ぐために、狭い余白を使用する
myPlot.Axes.Margins(0, 0, 0, 0.1);
// グループラベルを追加する
double[] positions = [0.5, 1.5, 2.5, 3.5];
string[] labels = { "Alfred", "Ralph", "Don", "James" };
myPlot.Axes.Bottom.SetTicks(positions, labels);
myPlot.SavePng("demo.png", 400, 300);
このレシピは、図形カテゴリに含まれる多数のレシピの1つです
