ParetoRecipes generates Pareto plots from a set of points in a multiobjective optimization problem using Plots.jl. A Pareto plot consists of the set of points together with a Pareto front (alternatively, Pareto frontier or Pareto set). Colloquially, we will refer to such plots as Paretos.
ParetoRecipes does not focus on the multiobjective optimization itself, or even on breadth of exact and approximate algorithms to trace out Pareto fronts for optimization problems. You can find such features and more in the MultiJuMP package.
Currently, ParetoRecipes only supports two-dimensional (2D) Paretos with an extremely inefficient brute-force algorithm for finding the Pareto front.
We plot a simple Pareto for a minimization problem with four points: (1, 0), (0, 1), (1, 1), and (2, 2). The Pareto front consists of the first two points, (1, 0) and (0, 1).
using ParetoRecipes using Plots pareto([[1, 0], [0, 1], [1, 1], [2, 2]])
ParetoRecipes offers a set of recipes. Recipes abstract away the dependencies on plotting libraries like Plots.jl. Each recipe is a
@recipe macro from RecipesBase. There are different kinds of recipes. The
@recipe for a Pareto plot in ParetoRecipes is a series recipe (
@series) that composes two plots: a scatter plot (
:scatter) and a line plot (
The GraphRecipes.jl repo has many more examples of the power of series recipes.
ParetoRecipes does not currently support other concepts named after the economist Vilfredo Pareto:
- Pareto Charts: a different kind of visualization whose series recipe would consist of a sorted histogram composed with a cumulative line plot
- Pareto Distributions: offered in Distributions.jl
This work was supported in part by the United States government under the DARPA DSSoC program.