ClimateMARGO / ClimateMARGO.jl

Julia implementation of MARGO, an idealized climate-economic modelling framework for Optimizing trade-offs between emissions Mitigation, Adaptation, carbon dioxide Removal, and solar Geoengineering.
https://margo.plutojl.org/
MIT License
67 stars 13 forks source link

Replace PyPlot calls with Plots.jl #66

Open hdrake opened 3 years ago

hdrake commented 3 years ago

@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?

fonsp commented 3 years ago

I think rewriting to Plots.jl is a good idea, partly because right now the following does not work:

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.

hdrake commented 3 years ago

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.

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.

fonsp commented 3 years ago

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.

fonsp commented 3 years ago

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.

hdrake commented 2 years ago

Addressing this issue in https://github.com/ClimateMARGO/ClimateMARGO.jl/pull/84