Plotting Sims Results
The following describes several ways to plot results from Sims. Note
that because Gadfly, PyPlot, and Winston all define plot, the plot
methods below are written out to avoid conflicts.
Gadfly
Gadfly works well with Sims results. Sims includes a basic Gadfly.plot method:
using Sims z = sim(Sims.Examples.Basics.Vanderpol(), 50.0) using Gadfly Gadfly.plot(z)
For more control, convert to a DataFrame, and use Gadfly directly. Here is an example showing how to plot each signal in a separate frame.
Note that Gadfly works better with "long" DataFrames rather than "wide" DataFrames, so a "melted" DataFrame is used.
using DataFrames df = convert(DataFrame, z) mdf = melt(df, :time) Gadfly.plot(mdf, x = :time, y = :value, ygroup = :variable, Geom.subplot_grid(Geom.line))
PyPlot
PyPlot is another good option. Here is a basic plot:
using Sims z = sim(Sims.Examples.Lib.CauerLowPassAnalog(), 60.0) using PyPlot figure() PyPlot.plot(z.y[:,1], z.y[:,2], label = "n1") PyPlot.plot(z.y[:,1], z.y[:,3], label = "n4") legend(loc = 1)
Here is a way to plot all columns:
figure() for i in 1:length(z.colnames) PyPlot.plot(z.y[:,1], z.y[:,i+1], label = z.colnames[i]) end legend(loc = 1) xlabel("Time, sec") title("Model results")
Here's a way to plot each channel in its own subplot:
figure() for i in 1:length(z.colnames) subplot(length(z.colnames), 1, i, sharex = true) PyPlot.plot(z.y[:,1], z.y[:,i+1]) ylabel(z.colnames[i]) end xlabel("Time, sec") suptitle("Model results")
DataFrames can make it easier to refer to columns by names:
using DataFrames d = convert(DataFrame, z) figure() PyPlot.plot(d[:time], d[:n4]) legend(loc = 1) xlabel("time") ylabel("n4") title("Model results")
If you have pandas, that's also useful for
plotting multiple columns. The [:plot] is a method of the DataFrame
object.
using PyCall @pyimport pandas pd = pandas.DataFrame(z.y[:,2:end], z.y[:,1], columns = z.colnames) figure() pd[:plot]()
Here's an example using subplots:
figure() pd[:plot](subplots = true)
Winston
Sims provides basic Winston support that shows each data column in a frame. Here is an example:
using Sims using Winston z = sim(Sims.Examples.Basics.Vanderpol(), 50.0) wplot(z)