Open hdrake opened 3 years ago
I think rewriting to Plots.jl is a good idea, partly because right now the following does not work:
pkg> add ClimateMARGO
julia> using ClimateMARGO
This is because the last command will initialize PyPlot.jl, which searches for an existing installation of matplotlib, and if not found, it prints an error with instructions.
About 1.2.3.: If you use Plots.jl (1.), then you can write the plot functions without adding Plots.jl as a dependency to ClimateMARGO, so (2.) and (3.) are no longer necessary.
There is a package specifically for this situation: https://github.com/JuliaPlots/RecipesBase.jl . It is a "mock version" of Plots.jl that allows packages to define their own plots using plot
commands, but they only work if the user installs Plots
themselves. But if a user does not want MARGO's plotting functions, then there is very little overhead.
It is a "mock version" of Plots.jl that allows packages to define their own plots using
plot
commands, but they only work if the user installsPlots
themselves.
Will this be transparent enough for users? Like it will give instructions when you try to plot? I don’t want people to expect plots and not know why they don’t show up.
That's a good point -- currently it does not, but I have submitted this to https://github.com/JuliaPlots/Plots.jl/issues/4431
If they can't fix it soon, we can write our own workaround to print this warning.
We can also just make Plots.jl one of our dependencies (without the Recipes trick). Maybe we are over-optimizing by not including it, even though users of ClimateMARGO will very likely want to plot the results.
Addressing this issue in https://github.com/ClimateMARGO/ClimateMARGO.jl/pull/84
@fonsp has mentioned that having PyPlot as a dependency for ClimateMARGO.jl unecessarily complicates things.
I see three options for moving forward: 1) Re-implement plotting functions using Plots.jl 2) Remove plotting submodule from ClimateMARGO.jl and include it in separate PlotMARGO.jl package, or more general utility package 3) Same as (2) but re-implement using Plots.jl
What do you think @fonsp? My understanding is that you already have a hacky way of removing the plotting package dependencies– is this even necessary? I think it might be desirable even for your average user because it will decrease build / binder spin-up time?