using StatsPlots, Plots, RDatasets, Distributions; gr() Plots.reset_defaults() iris = dataset("datasets", "iris") singers = dataset("lattice","singer") dist = Gamma(2) a = [randn(100); randn(100) .+ 3; randn(100) ./ 2 .+ 3]
Plots is great on its own, but the real power comes from the ecosystem surrounding it. The design of Plots (and more specifically RecipesBase) is to bind together disparate functionality into a cohesive and consistent user experience. Some packages may choose to implement recipes to visualize their custom types. Others may extend the functionality of Plots for Base types. On this page I'll attempt to collect and display some of the many things you can do using the ecosystem which has developed around the Plots core.
The JuliaPlots organization builds and maintains much of the most commonly used functionality external to core Plots, as well as RecipesBase, PlotUtils, the documentation, and more.
Much of this functionality once existed in core Plots, but has been moved out to facilitate a clean separation between those features that are truly "core" and those which are specific to certain types of workflows and disciplines.
@df iris marginalhist(:PetalLength, :PetalWidth, bins = 20) # hide
@df iris corrplot(cols(1:4), bins = 20) # hide
@df singers violin(:VoicePart, :Height, marker = (0.2, :blue, stroke(0)), legend = false) # hide @df singers boxplot!(:VoicePart, :Height, marker = (0.3, :orange, stroke(2)), alpha = 0.75) # hide @df singers dotplot!(:VoicePart, :Height, marker = (:black, stroke(0))) # hide
@df iris andrewsplot(:Species, cols(1:4), legend = :topleft) # hide
ea_histogram(a, bins = :scott, fillalpha = 0.4) # hide
plot(Normal(3, 5), fill = (0, 0.5, :orange)) # hide
scatter(dist, leg=false) # hide bar!(dist, func=cdf, alpha=0.3) # hide
groupedbar(rand(10, 3), bar_position = :stack, bar_width = 0.7) # hide
GraphRecipes is a collection of recipes for visualizing graphs. Users specify a graph through an adjacency matrix, an adjacency list, or an AbstractGraph via LightGraphs.
julia> using GraphRecipes, Plots julia> using LightGraphs julia> g = wheel_graph(10) julia> graphplot(g, curves=false)
Example of using GraphRecipes to plot a directed graph given an asymmetric adjacency matrix:
using GraphRecipes, Plots g = [0 1 1; 0 0 1; 0 1 0] graphplot(g, names=1:3, curvature_scalar=0.1)
More examples of using GraphRecipes are here: http://docs.juliaplots.org/latest/graphrecipes/examples/
AtariAlgos wraps the ArcadeLearningEnvironment as an implementation of an AbstractEnvironment from the Reinforce interface. This allows it to be used as a plug-and-play module with general reinforcement learning agents.
Games can also be "plotted" using Plots.jl, allowing it to be a component of more complex visualizations for tracking learning progress and more, as well as making it easy to create animations.
Reinforce.jl is an interface for Reinforcement Learning. It is intended to connect modular environments, policies, and solvers with a simple interface.
Tools, models, and math related to machine learning in Julia.
Augmentor is an image-augmentation library designed to render the process of artificial dataset enlargement more convenient, less error prone, and easier to reproduce. This is achieved using probabilistic transformation pipelines.
DifferentialEquations.jl is a package for solving numerically solving differential equations in Julia by Chris Rackauckas. The purpose of this package is to supply efficient Julia implementations of solvers for various differential equations. Equations within the realm of this package include ordinary differential equations (ODEs), stochastic ordinary differential equations (SODEs or SDEs), stochastic partial differential equations (SPDEs), partial differential equations (with both finite difference and finite element methods), differential algebraic equations, and differential delay equations. It includes well-optimized implementations classic algorithms and ones from recent research, including algorithms optimized for high-precision and HPC applications.
All of the solvers return solution objects which are set up with plot recipes to give informative default plots.
The PhyloTrees.jl package provides a type representation of phylogenetic trees. Simulation, inference, and visualization functionality is also provided for phylogenetic trees. A plot recipe allows the structure of phylogenetic trees to be drawn by whichever plotting backend is preferred by the user.
Process EEG files and visualize brain activity.
In a paper, Tupper presents a method for graphing two-dimensional implicit equations and inequalities. This package gives an implementation of the paper's basic algorithms to allow the Julia user to naturally represent and easily render graphs of implicit functions and equations.
A control systems design toolbox for Julia. This toolbox works similar to that of other major computer-aided control systems design (CACSD) toolboxes. Systems can be created in either a transfer function or a state space representation. These systems can then be combined into larger architectures, simulated in both time and frequency domain, and analyzed for stability/performance properties.
Utility package for efficient tracking of optimization histories, training curves or other information of arbitrary types and at arbitrarily spaced sampling times
ApproxFun is a package for approximating functions. It is heavily influenced by the Matlab package Chebfun and the Mathematica package RHPackage.
Density estimation using Average Shifted Histograms.
Common plotting recipes for statistics and machine learning.
LazySets.jl is a Julia package for calculus with convex sets. The principle behind LazySets is to wrap set computations into specialized types, delaying the evaluation of the result of an expression until it is necessary. Combining lazy operations in high dimensions and explicit computations in low dimensions, the library can be applied to solve complex, high-dimensional problems.
Reachability plot of a two-mode hybrid system:
And many more:
- Transformations.jl / Flow.jl