# 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
x ~ advance
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
x ~ advance
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
x ~ advance
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
x ~ advance
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.