# Visualization

There are three main functions in Cropbox used for visualization. For information regarding syntax, please check the reference.

## plot()

The plot() function is used to plot two-dimensional graphs.

Two Vectors

Let's start by making a simple plot by using two vectors of discrete values.

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plot(x, y)

Multiple Vectors

You can also plot multiple series, by using a vector of vectors.

plot(x, [x, y])

DataFrame

We can also make a plot using a DataFrame and its columns. Recall that the simulate() function provides a DataFrame.

@system S(Controller) begin
y1(x) => 2x ~ track
y2(x) => x^2 ~ track
end

df = simulate(S; stop=10)

p = plot(df, :x, [:y1, :y2])

### plot!()

plot!() is an extension of the plot() function used to update an existing Plot object p by appending a new graph made with plot()

Example

@system S(Controller) begin
y3(x) => 3x ~ track
end

df = simulate(S; stop=10)

plot!(p, df, :x, :y3)

## visualize()

The visualize() function is used to make a plot from an output collected by running simulations. It is essentially identical to running the plot() function with a DataFrame from the simulate() function, and can be seen as a convenient function to run both plot() and simulate() together.

Example

@system S(Controller) begin
y1(x) => 2x ~ track
y2(x) => x^2 ~ track
end

v = visualize(S, :x, [:y1, :y2]; stop=10, kind=:line)

### visualize!()

visualize!() updates an existing Plot object p by appending a new graph generated with visualize().

Example

@system S(Controller) begin
y3(x) => 3x ~ track
end

visualize!(v, S, :x, :y3; stop=10, kind=:line)

## manipulate()

The manipulate function has two different methods for creating an interactive plot.

manipulate(f::Function; parameters, config=())

Create an interactive plot updated by callback f. Only works in Jupyter Notebook.

manipulate(args...; parameters, kwargs...)

Create an interactive plot by calling manipulate with visualize as a callback.