Table 1
Contributors sorted by number of commits.
| NAME | AFFILIATION | ROLE | ORCID |
|---|---|---|---|
| Tom Breloff | Headlands Technologies | Creator | missing |
| Daniel Schwabeneder | TU Wien | ProjectLeader | 0000-0002-0412-0777 |
| Michael Krabbe Borregaard | GLOBE Institute, University of Copenhagen | ProjectLeader | 0000-0002-8146-8435 |
| Simon Christ | Leibniz Universität Hannover | ProjectLeader | 0000-0002-5866-1472 |
| Josef Heinen | Forschungszentrum Jülich | ProjectMember | 0000-0001-6509-1925 |
| Yuval | missing | Other | missing |
| Andrew Palugniok | missing | ProjectMember | missing |
| Simon Danisch | @beacon-biosignals | Other | missing |
| Pietro Vertechi | Veos Digital (https://veos.digital/) | ProjectMember | missing |
| Zhanibek Omarov | Korea Advanced Inst. of Science and Technology (KAIST) | ProjectMember | 0000-0002-8783-8791 |
| Thatcher Chamberlin | missing | Other | missing |
| @ma-laforge | missing | ProjectMember | missing |
| Christopher Rackauckas | Massachusetts Institute of Technology | Other | 0000-0001-5850-0663 |
| Oliver Schulz | Max Planck Institute for Physics | Other | missing |
| Sebastian Pfitzner | @JuliaComputing | Other | missing |
| Takafumi Arakaki | missing | Other | missing |
| Amin Yahyaabadi | University of Manitoba | Other | missing |
| Jack Devine | missing | Other | missing |
| Sebastian Pech | missing | Other | missing |
| Patrick Kofod Mogensen | @JuliaComputing | Other | 0000-0002-4910-1932 |
| Samuel S. Watson | missing | Other | missing |
| Naoki Saito | UC Davis | Other | 0000-0001-5234-4719 |
| Benoit Pasquier | University of Southern California (USC) | Other | 0000-0002-3838-5976 |
| Ronny Bergmann | NTNU Trondheim | Other | 0000-0001-8342-7218 |
| Andy Nowacki | University of Leeds | Other | 0000-0001-7669-7383 |
| Ian Butterworth | missing | Other | missing |
| David Gustavsson | Lund University | Other | 0000-0002-0195-475X |
| Anshul Singhvi | Columbia University | Other | 0000-0001-6055-1291 |
| david-macmahon | missing | Other | missing |
| Fredrik Ekre | missing | Other | missing |
| Maaz Bin Tahir Saeed | missing | Other | missing |
| Kristoffer Carlsson | missing | Other | missing |
| Will Kearney | missing | Other | missing |
| Niklas Korsbo | missing | Other | missing |
| Miles Lucas | missing | Other | missing |
| @Godisemo | missing | Other | missing |
| Florian Oswald | missing | Other | missing |
| Diego Javier Zea | missing | Other | missing |
| @WillRam | missing | Other | missing |
| Fedor Bezrukov | missing | Other | missing |
| Spencer Lyon | missing | Other | missing |
| Darwin Darakananda | missing | Other | missing |
| Lukas Hauertmann | missing | Other | missing |
| Huckleberry Febbo | missing | Other | missing |
| @H-M-H | missing | Other | missing |
| Josh Day | missing | Other | missing |
| @wfgra | missing | Other | missing |
| Sheehan Olver | missing | Other | missing |
| Jerry Ling | missing | Other | missing |
| Jks Liu | missing | Other | missing |
| Seth Axen | missing | Other | missing |
| @o01eg | missing | Other | missing |
| Sebastian Micluța-Câmpeanu | missing | Other | missing |
| Tim Holy | missing | Other | missing |
| Tony Kelman | missing | Other | missing |
| Antoine Levitt | missing | Other | missing |
| Iblis Lin | missing | Other | missing |
| Harry Scholes | missing | Other | missing |
| @djsegal | missing | Other | missing |
| Goran Nakerst | missing | Other | missing |
| Felix Hagemann | missing | Other | missing |
| Matthieu Gomez | missing | Other | missing |
| @biggsbiggsby | missing | Other | missing |
| Jonathan Anderson | missing | Other | missing |
| Michael Kraus | missing | Other | missing |
| Carlo Lucibello | missing | Other | missing |
| Robin Deits | missing | Other | missing |
| Misha Mkhasenko | missing | Other | missing |
| Benoît Legat | missing | Other | missing |
| Steven G. Johnson | missing | Other | missing |
| John Verzani | missing | Other | missing |
| Mattias Fält | missing | Other | missing |
| Rashika Karki | missing | Other | missing |
| Morten Piibeleht | missing | Other | missing |
| Filippo Vicentini | missing | Other | missing |
| David Anthoff | missing | Other | missing |
| Leon Wabeke | missing | Other | missing |
| Yusuke Kominami | missing | Other | missing |
| Oscar Dowson | missing | Other | missing |
| Max G | missing | Other | missing |
| Fabian Greimel | missing | Other | missing |
| Jérémy | missing | Other | missing |
| Pearl Li | missing | Other | missing |
| David P. Sanders | missing | Other | missing |
| Asbjørn Nilsen Riseth | missing | Other | missing |
| Jan Weidner | missing | Other | missing |
| @jakkor2 | missing | Other | missing |
| Pablo Zubieta | missing | Other | missing |
| Hamza Yusuf Çakır | missing | Other | missing |
| John Rinehart | missing | Other | missing |
| Martin Biel | missing | Other | missing |
| Moritz Schauer | missing | Other | missing |
| Mosè Giodano | missing | Other | missing |
| @olegshtch | missing | Other | missing |
| Leon Shen | missing | Other | missing |
| Jeff Fessler | missing | Other | missing |
| @hustf | missing | Other | missing |
| Asim H Dar | missing | Other | missing |
| @8uurg | missing | Other | missing |
| Abel Siqueira | missing | Other | missing |
| Adrian Dawid | missing | Other | missing |
| Alberto Lusiani | missing | Other | missing |
| Balázs Mezei | missing | Other | missing |
| Ben Ide | missing | Other | missing |
| Benjamin Lungwitz | missing | Other | missing |
| Bernd Riederer | University of Graz | Other | 0000-0001-8390-0087 |
| Christina Lee | missing | Other | missing |
| Christof Stocker | missing | Other | missing |
| Christoph Finkensiep | missing | Other | missing |
| @Cornelius-G | missing | Other | missing |
| Daniel Høegh | missing | Other | missing |
| Denny Biasiolli | missing | Other | missing |
| Dieter Castel | missing | Other | missing |
| Elliot Saba | missing | Other | missing |
| Fengyang Wang | missing | Other | missing |
| Fons van der Plas | missing | Other | missing |
| Fredrik Bagge Carlson | missing | Other | missing |
| Graham Smith | missing | Other | missing |
| Hayato Ikoma | missing | Other | missing |
| Hessam Mehr | missing | Other | missing |
| @InfiniteChai | missing | Other | missing |
| Jack Dunn | missing | Other | missing |
| Jeff Bezanson | missing | Other | missing |
| Jeff Eldredge | missing | Other | missing |
| Jinay Jain | missing | Other | missing |
| Johan Blåbäck | missing | Other | missing |
| @jmert | missing | Other | missing |
| Lakshya Khatri | missing | Other | missing |
| Lia Siegelmann | missing | Other | missing |
| @marekkukan-tw | missing | Other | missing |
| Mauro Werder | ETH Zurich | Other | 0000-0003-0137-9377 |
| Maxim Grechkin | missing | Other | missing |
| Michael Cawte | missing | Other | missing |
| @milesfrain | missing | Other | missing |
| Nicholas Bauer | missing | Other | missing |
| Nicolau Leal Werneck | missing | Other | missing |
| @nilshg | missing | Other | missing |
| Oliver Evans | missing | Other | missing |
| Peter Gagarinov | missing | Other | missing |
| Páll Haraldsson | missing | Other | missing |
| Rik Huijzer | missing | Other | missing |
| Romain Franconville | missing | Other | missing |
| Ronan Pigott | missing | Other | missing |
| Roshan Shariff | missing | Other | missing |
| Scott Thomas | missing | Other | missing |
| Sebastian Rollén | missing | Other | missing |
| Seth Bromberger | missing | Other | missing |
| Siva Swaminathan | missing | Other | missing |
| Tim DuBois | missing | Other | missing |
| Travis DePrato | missing | Other | missing |
| Will Thompson | missing | Other | missing |
| Yakir Luc Gagnon | missing | Other | missing |
| Benjamin Chislett | missing | Other | missing |
| @hhaensel | missing | Other | missing |
| @improbable22 | missing | Other | missing |
| Johannes Fleck | missing | Other | missing |
| Peter Czaban | missing | Other | missing |
| @innerlee | missing | Other | missing |
| Mats Cronqvist | missing | Other | missing |
| Shi Pengcheng | missing | Other | missing |
| @wg030 | missing | Other | missing |
| Will Tebbutt | University of Cambridge | Other | missing |
| @t-bltg | missing | Other | missing |
| Fred Callaway | missing | Other | missing |
| Jan Thorben Schneider | missing | Other | missing |
| Lee Phillips | Alogus Research Corporation | Other | 0000-0003-4102-2460 |
| Tom Gillam | missing | Other | missing |

Listing 1
Examples of shorthands. Full list available at https://docs.juliaplots/stable/api/#Plot-specification.

Figure 1
Example plot of the iris dataset [37] to illustrate the use of different attribute types (cf. Listing 2).

Listing 2
Code corresponding to Figure 1.


Figure 2
Plotting pipeline in Plots.jl. The separation of construction and output production enables the flexible use of different backends in the same session and helps to avoid unnecessary intermediate calculation. Created using mermaid [1].

Listing 3
Examples of input preprocessing steps in Plots.jl. All these calls are equivalent.

Listing 4
Recipe signatures.

Figure 3
Showcase of composing recipes. Plotting a ODESolution object from DifferentialEquations.jl containing Measurements from Measurements.jl will apply the recipe of DifferentialEquations.jl which will return vectors of Measurements, which will apply the recipe from Measurements.jl; yielding the solutions of the Lotka-Volterra system [2] with correct error bounds without the user having to change the callsite. Neither of these packages has code in their recipes for handling types of the other package. Full code available in Listing 9.

Listing 5
Measurements.jl recipe.

Figure 4
Overview of the Plots.jl ecosystem and its interfaces with other Julia packages. The numbers of dependents are taken from juliahub [30].

Listing 6
Plots.jl code corresponding to Figure 5.

Listing 7
PyPlot.jl code roughly corresponding to using Plots; pyplot() in line 4 of Listing 6.

Listing 8
PGFPlotsX.jl code roughly corresponding to using Plots; pgfplotsx() in line 4 of Listing 6.

Figure 5
An example figure generated from the code shown in Listing 6. Listings 7 and 8 illustrate how the generated backend code could look like for different backends. The actual backend code is more verbose and likely uses more low-level functions. These listings also show how Plots.jl provides a unified API for its backend packages, since the translation between Listings 7 and 8 is not straightforward.

Figure 6
Lines of code alive of the top ten contributors of the Plots.jl repository over time. Data created with hercules [36].

Figure 7
Lines of code alive of the top ten contributors of the Plots.jl ecosystem (Figure 4) over time. Data created with hercules [36].

Listing 9
Recipes showcase.
