[ANN] ControlPlots - an easy to use plotting package for control and other engineers

We are proud to announce ControlPlots 0.2.7, the first release that has all features we consider as essential for our research.

Main design goals:

  • high quality plots, many plot windows can be open at the same time
  • multi-channel oscilloscope like plots that allow zoom and pan with a synchronized time axis
  • easy to use and fast 2D animations of particle systems, where the particles are connected by segments
  • high quality bode plots compatible with ControlSystems.jl

Image

All plots can be created using just one function call, even if you plot n x m time-series with labels and a title.
An n x m time-series are n vertically aligned plots with one common x-axis, and m time-series for any of these plots, for example useful to compare set values and actual values of a control system.

Most plots can be saved, modified and plotted again. Useful if you need to change labels or titles after the plot was created by an expensive simulation.

You can install the examples with

using ControlPlots
ControlPlots.install_examples()

and access a text-menu with all examples with:

include("examples/menu.jl)

More info here

18 Likes

Thanks for developing this package! I especially like the n x m plot, very useful when I need to check a lot of different states during model development.

2 Likes

Noticing that PyPlot (Matplotlib) is among dependencies, I was just wondering: what does Matplotlib have that native Julia plotting ecosystem does not have?

It is more mature. Makie did not reach version 1.0 yet and has breaking changes pretty often. Furthermore Makie is a much heavier dependency. And until recently you could not launch multiple GLMakie plot windows. This might work now, though. Finally, creating animations with Plots.jl on Windows is extremely slow, even though it works well on Linux. ControlPlots.jl works well both on Windows and Linux. I could not test it on MacOS, though.

1 Like

Some small comments:

Makie did not reach version 1.0 yet

True although I wouldn’t put too much weight on that number alone because

and has breaking changes pretty often

we have a relatively low threshold for what we consider breaking so every once in a while we do have a minor release that fixes some things in a non-backward compatible (i.e. breaking) way. But that rarely means that we’re breaking lots of people’s normal plotting code, especially now that much more people are using Makie day to day. It’s more likely changes relate to less used features, but we still have to be technically correct and tag breaking if we change those. The important thing is how much code churn a given breaking change causes in the ecosystem, and that can differ a lot.

until recently you could not launch multiple GLMakie plot windows

GLMakie has had that for a while now :slight_smile: added in v0.17.6 (2022-06-17)

3 Likes

That is nice!

There is one more reason for me to not to use Makie as default plotting backend: I want to:

  • be able to have one window per plot
  • be able to export vector graphics for high quality publications

I think the first point is possible with GLMakie, the second is possible with CairoMakie, but there is no Makie backend that supports both features. ControlPlots.jl does support both of these features.

Correct me if I am wrong.

I often work in GLMakie and then save the resulting figure using CairoMakie, for example:

using CairoMakie
using GLMakie; GLMakie.activate!()

xs = range(0.0, 2π; length = 100)
ys = sin.(xs)

fig = Figure()
ax = Axis(fig[1,1])
lines!(ax, xs, ys)
display(fig)

save("sine_of_x.pdf", fig; backend = CairoMakie)

Occasionally you have to fine tune a bit to account for GL/Cairo differences, but it usually works quite well.

2 Likes