aboutsummaryrefslogtreecommitdiff
path: root/tree-size-stats.gnuplot
blob: 9c36b6504332cfb23648c41d3956c206265a366e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env gnuplot

## SPDX-License-Identifier: CC0-1.0
##
## Copyright (C) 2025 Woj. Kosior <koszko@koszko.org>

if (!exists("stats_filename")) stats_filename = "tree-size-stats.csv";
if (!exists("omit_breaking_changes")) omit_breaking_changes = 0;
if (!exists("out_filename")) out_filename = "tree-size-stats.svg";

set terminal svg size 800,485 font "DejaVu,sans,14.5";
set output out_filename;
#set title "Dependency tree sizes of rebuilt npm Registry packages";
set ylabel "Dependency count";
set datafile separator ",";
bw = 0.9; # box width
bg = 0.6; # box gap
bs = 2 * bw + bg; # box span
psh = 0.15; # point shift
set boxwidth bw;
set style fill solid border -1; 
set key noautotitle invert;
#set xtics rotate by 30 right;
set xtics rotate by 11 right scale 0;
set bmargin 4.5;
set lmargin 11;
set rmargin 3.5;
set linetype 1 linecolor rgb "0x555555";
set linetype 2 linecolor rgb "0x777777";
set linetype 3 linecolor rgb "0x111111" pt 0;
set linetype 4 linecolor rgb "0x111111";
unset pointintervalbox;

stats "tree-sizes.csv" using "TREE-VERS" nooutput;

lbl_shift = -(STATS_max / 25);

ytic_max = 200 * (1 + floor(STATS_max / 200));

set ytics 0, 200;
do for [i=1:ytic_max/200] {
    set ytics add (i * 200);
}

set xrange [(-0.5 * (bg + bw)):(4 * bs - 0.5 * (bg + bw))];

set yrange [2*lbl_shift:ytic_max];

plot for [i=1:0:-1] stats_filename \
         using (($0 - 1) * bs + i * bw):\
               (column(i == 0 ? "VERS-AVG" : "DEPS-AVG")) \
         with boxes \
         title (i == 0 ? "All dependency package versions" : \
                         "All dependency packages (version-agnostic)"), \
     for [i=0:1] "" \
         using (($0 - 1) * bs + i * bw):\
               (lbl_shift):\
               (stringcolumn(i == 0 ? "VERS-AVG" : "DEPS-AVG")) \
         with labels, \
     for [i=0:1] "" \
         using (($0 - 1) * bs + i * bw):\
               (column(i == 0 ? "VERS-AVG" : "DEPS-AVG")):\
               (column(i == 0 ? "VERS-STD_DEV" : "DEPS-STD_DEV")) \
         with yerrorbars lt 3, \
     ""  \
         using ($0 * bs + 0.5 * bw):\
               "VERS-AVG":\
               (""):\
               xtic(stringcolumn("DESCRIPTION")) \
         with labels, \
     for [i=15:0:-1] "tree-sizes.csv" \
         using (omit_breaking_changes && column("BREAKING-CHANGES") == 1 ? \
                       1 / 0 : \
                column("IN-DEBIAN") == i % 2 ? \
                       (i / 4) * bs + i % 4 / 2 * bw + (i % 2 * 2 - 1) * psh : \
                       1 / 0):\
               (column((i / 4 == 0 ? "TREE-" : \
                        i / 4 == 1 ? "TREE-MIN-" : \
                        i / 4 == 2 ? "TREE-DUMMY-" : \
                                     "TREE-FLAT-") \
                       . \
                       (i % 4 / 2 == 0 ? "VERS" : "DEPS"))) \
         with points lc 4 pt (i % 2 == 0 ? 6 : 7) ps 0.5 \
         title (i == 0 ? "Absent in Debian" : \
                i == 1 ? "Packaged in Debian" : \
                         "");