-
-
Notifications
You must be signed in to change notification settings - Fork 358
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GR backend #108
Comments
I did some very basic initial tests. Here's some things that I consider bugs (but may be unavoidable, as I don't know GR very well):
In addition, there are tons of errors on the examples... I recommend doing the following:
Note that test_examples also accepts an optional second argument which is the number of a specific example. |
ps - this is the error when you close the window:
|
Thanks for merging the PR and doing initial tests. In terms of those results I would like to mention that:
BTW: It seems to me that some of the "bugs" are simply ignored by other backends, e.g.
After analyzing the debug output It turns out, that the markersize is given as an array:
In the meantime I noticed, that Plots tries to draw marker symbols with different colors and sizes. |
Thanks for the thorough respone @jheinen. I think this contribution is great, and the time-to-plot seems very quick based on my very brief tests.
Yes, Plots is intended to be a superset of functionality of the underlying backends. This means that a user should be able to do anything they want, but they may have to switch backends to accomplish it. Ideally it will be a little easier to understand exactly which features are supported by the backends... Much of this is recorded within supported.jl, but it's not at all complete. You found a good example with PyPlot's markersize... a scalar value is supported, but not an array. I think at some point, a re-write of the "supported" logic is in order. This has been on my radar for a while... see: #7 I'm not at all asking that you fully support all the examples... just that they will help you test your code, and maybe point you to missing functionality. Thanks again for the contribution! |
two small things,
|
Added TODO messages (see jheinen@c5d2181) for missing features - I keep trying and don't expect any problems, except for animations, which are handled internally in GR. |
Anti-aliasing in GR currently only works for the Qt4 and (OS X) Quartz drivers. The next GR release will contain a cairographics driver which will add this feature in UN*X environments. Resizing, subplots and other things are still on the TODO list for the Plots backend. |
another small thing:
runs a few seconds (wall clock), but
without any visible action on screen? |
Andreas, this question is likely much more complicated and far reaching than Plots/GR. I suspect it has more to do with the time macro, and when the command is considered "complete". I've seen this in the past, and assumed it has more to do with the asynchronous event architecture underlying Julia (which I admit I only have partial knowledge of). Essentially julia hands off responsibility of the command to another thread and doesn't monitor completion of the task on that thread... It just marks it as "complete" when the handoff occurs. (This is mostly guessing of course)
|
Use Your code doesn't plot for the same reason that |
@KristofferC you're right I misread that... display is suppressed with a semicolon at the REPL (and always suppressed within scripts), so you need an explicit call to The behavior I'm referring to is that at some part of the display pipeline (depending on the backend), julia will "hand off" processing, and will claim that the command is "complete", even though the gui window, browser window, or whatever else may not be complete. I just tested this with Gadfly, and the image was visibly loading, even though julia had already printed the |
Yeah, I guess some backends return and finish the drawing asynchronously. |
@tbreloff : Making progress but still some TODOs:
|
Looking good! Let me know when you're ready to try a merge. On Mon, Jan 25, 2016 at 11:53 AM, Josef Heinen notifications@github.com
|
This looks nice! |
So that it doesn't get lost, I need to help with this request from @jheinen
|
Most of the stuff should work right now: http://pgi-jcns.fz-juelich.de/pub/doc/ExamplePlots.html To create animation, I had to disable transparency when converting the PNGs to GIF (see commit 8cd6b0b). Without the Should I provide the output for the http://plots.readthedocs.org/en/latest/examples/gr/ section? I'd still prefer SVG :-) - it's your choice ... |
These examples look really great. Nice work! As for the doc examples, they are auto-generated with a script in ExamplePlots.jl. I have had the same thought about changing the format... For example Plotly would be best as html, since then you could see the interactivity. It's on my list and I'm open to PRs there if you have good ideas.
|
Can I help to provide the doc examples for GR? Would it help to force PNG for the inline format, e.g. thru a configuration option or an environment variable ( |
Yes you might be able to help. The examples are generated from ExamplePlots, using this method: https://github.com/tbreloff/ExamplePlots.jl/blob/master/src/example_generation.jl#L206 I tried running it and it crashed for me... Maybe you'll be able to debug? If you get it working a PR would be great.
|
It seems like you've made a lot of progress on your fork of Plots... Any interest in submitting a PR to my dev branch soon?
|
This patch requires a new GR build, which is already finished for the UN*X systems. But currently I don't have access to our Windows build system - so, next week, when I'm back in the office, I'll make a PR. |
Sounds good. Thanks.
|
Still don't understand, why both mime methods (svg + png) are called. Nevertheless, make a PR now ... |
First: Will it be possible to have custom marker shapes?
julia> for i=1:10
try
println("save")
rand()<0.3 && error()
catch err
println(err)
finally
println("restore")
end
end
save
restore
save
restore
save
restore
save
restore
save
ErrorException("")
restore
save
ErrorException("")
restore
save
restore
save
restore
save
ErrorException("")
restore
save
restore We could even add a macro to do this: @state begin
# do something
end which could expand to: try
GR.savestate()
# code block
catch err
# do something with err
finally
GR.restorestate()
end At a minimum, this would clean up the code significantly. Thoughts? |
I added this macro (easier to do than discuss): macro gr_state(expr::Expr)
esc(quote
GR.savestate()
try
$expr
catch
GR.restorestate()
rethrow()
end
GR.restorestate()
end)
end and the state error goes away. (obviously the Shape error is still there, but at least it doesn't corrupt the session) |
Ok reinstalling GR now.
Of course we want everything to work, but that doesn't change the need for graceful handling of errors.
It should define a marker shape (in "unit coordinates centered at zero"). Try in another backend (for example, gadfly): shape = Shape([(-1,-1),(1,0),(-1,1)])
plot(rand(10), marker = (shape, 20, 0.3)) |
After manually clearing all traces of GR from my |
I have a temporary fix for the Shape issue here: 9d3e065 |
I updated the first comment with a TODO list... I'll try to add/remove as we make progress. Thanks again for working on this @jheinen... I'm looking forward to using GR for my work. |
... I'm getting closer (see e2e031c). The TODOs should be easy to implement. But I'm getting sleepy ... |
Just out of curiosity I added GR to the travis tests. The linux test passes, osx fails with:
|
Can I access the travis.ci log to verify the build step? |
This is what I see for GR:
|
Ok. I should tag a new GR version ASAP - the latest pre-compiled binary is required:
|
Ok no hurry from my end... I was just curious whether it would pass. |
It seems this is intentional on the part of IJulia (seems like a bad decision to me, but I'm sure there's a reason for it): https://github.com/JuliaLang/IJulia.jl/blob/master/src/inline.jl#L31-L40 I'm considering overriding this method for Plots so we're not constantly rebuilding multiple plots. |
IJulia weirdness fixed on dev. See #157 |
I feel like it's really important we change the behavior of writing out a temporary file |
For the broken markers example: I see this error when running from the REPL: julia> scatter(x,y,m=(8,:auto),lab=map(string,markers),bg=:linen,xlim=(0,10),ylim=(0,10))
GKS: unable to load font It might be unrelated, but figured I'd point it out. |
To summarize what I see for the markers example:
Presumably there is a silent error somewhere (probably inside GR.jl? I can't find any Do you have any ideas of how to investigate? |
Question... does GR support alpha values for colors? (either RGBA or setting the alpha seperately?) |
@tbreloff : I see the same behavior for the marker example (except the I still have no idea, but there is something going wrong: When I use the Using |
The alpha channel can be set with |
Thanks for the quick response @jheinen.
Maybe there's a discrepency between the
I suspect you accidentally made a vector of strings (as opposed to a 1xN matrix), so the whole vector was applied to each series.
Great to hear... this should be on the list of things to add. Each of linecolor, markercolor, markerstrokecolor, and fillcolor can take an RBGA value, and there are also fields linealpha, markeralpha, markerstrokealpha, and fillalpha. You might want to add something like (untested): function get_gr_transparency(d::KW, str)
c, a = d[symbol(str*"color")], d[symbol(str*"alpha")]
a == nothing ? alpha(c) : a
end
# assuming we're given a KW dictionary d, and we want to set the alpha for a line:
gr.settransparency(get_gr_transparency(d, "line")) |
GR is pretty well along, so lets open new issues for anything that comes up |
I came to this thread looking for information about
produces a plot, while
does not. It does produce a timing that's probably about right, but no plot. This is not related to any line ending with a semi-colon Apologies if this comment is in the wrong place, but it seems to be quite closely related to a discussion you had earlier on this thread. I can start a new thread if you'd prefer. Thanks. |
wrap the |
@mkborregaard, worked great, thanks! 48.2 seconds |
Shit. This is among other things because precompilation is currently turned off for the metadata version. Try |
@mkborregaard, thanks! Did that and got 52.4 seconds. and 0.56 seconds on a second run. Thanks. |
It'd be nice if we could fix the issues preventing precompilation. Not a small task though at the moment. |
* use Dates * Add compat for RecipesBase * Fix badges * Plots test * Fix travis * Forgot using * Update .travis.yml Co-Authored-By: Anshul Singhvi <asinghvi17@simons-rock.edu> * Use ds/rewrite * Try with --project Credit: Fredrik Ekre * Use latest stable julia version * Allow failures on MacOS * Docs deployment * Literate + enable deploy * Update Project.toml * fix missing comma * Fix error * try fixing repo name * small change to trigger CI * play better with Literate * allow type recipes for `Number`s in arrays and surfaces * small fixes * skip maybestrings * fix ambiguity * Add badge * Fix build badge link * Show status only for master branch * Fix README docs link * remove subdomain * Create TagBot.yml * fix surface type recipe * bump version * fix error for grouping * bump version * further grouping fixes * bump version * fix plotting functions * bump version * downgrade version * fix plotting rowvector of functions * bump version * support parametric type in `@userplot` * add docs for parametric type in `@userplot` * bump version * fix grouping * bump version * bump PlotUtils compat * bump version * add zulip chat link to readme [skip ci] * add zulip link [skip ci] * Fix typo in docs `AbstractArry` -> `AbstractArray` * add hook after series decomposition (#52) * add process_sliced_series_attributes! * export process_slice_series_attrributes! * remove `kw` * Update Project.toml [skip ci] * Initial pass at CI * Add script from Plots * Update to MakieRecipes * comment out artifact uploads * Plots test * CairoMakie tests * Forgot using * Update .travis.yml Co-Authored-By: Anshul Singhvi <asinghvi17@simons-rock.edu> * Use ds/rewrite * Try with --project * Another try Credit: Fredrik Ekre * Import examples from MakieRecipes * add separately * dev * $(mktemp -d) * Update .github/workflows/CI.yml Co-Authored-By: Anshul Singhvi <asinghvi17@simons-rock.edu> * use temp_for_test * fix typo * Update .github/workflows/CI.yml * ensure that images are uploaded * Pass a begin block to testset * fix the macro * seriously, I forgot .png? * Update .travis.yml * Fix split_attribute (#53) * Fix a typo in the `recipe_pipeline!` constructor (#54) * bump version * fix time and period recipes * bump version * Fix typo (#56) * implement `Base.axes` for `Volume` * bump version * Update group.jl * implement iterate for Surface and Volume * bump version * use NaNMath log functions * Add one_arg_shorthands macro (#73) * Add one_arg_shorthands macro * export one_arg_shorthands * patch version [skip ci] * Add :mesh3d as 3d series type (#62) * 0.1.12 [skip ci] * add compat for NaNMath * dispatch processing of axis args on the plot object (#63) * dispatch processing of axis args on the plot object * Update type_recipe.jl * Update type_recipe.jl * Update type_recipe.jl * add to API * Update api.jl * 0.1.13 * remove one_arg_shorthands macro (#74) It didn't work out as intended * 1.1.0 * more friendly error when x,y shape mis-match * AbstractDict plot sorted * more friendly error when x,y shape mis-match (#65) * more friendly error when x,y shape mis-match * don't touch z * Update src/user_recipe.jl Co-authored-by: Daniel Schwabeneder <daschw@disroot.org> * switch to github-actions and update runtests.jl to run Plots test images * update CI.yml * keep makie tests * move `signature_string` to RecipesPipeline * minor version bump * Revert "minor version bump" This reverts commit 63c713b7808adf305484a9724cef9eabae2a0702. * move `warn_on_recipe_aliases!` from Plots and add some `@nospecialize` * add CompileBot * minor version bump * add precompile statements * bump version * add new line at end of file * add recipe for list of NamedTuples * add newline * update tagbot action * add recipe for list of NamedTuples * move `warn_on_recipe_aliases!` from Plots and add some `@nospecialize` * update tagbot action * Fix broken histogram and stepbins plotting * Increase package version to v0.2.1 * Update precompile_*.jl file * add TestImages test dependency * refine friendly error (#75) * Update precompile_*.jl file * don't stringify argument to `warn_on_recipe_aliases!` early needs matching Plots changes * minor release * add `@nospecialize` annotations * release * update CompileBot * update TESTCMD in CI * fix TESTCMD in compilebot action * Update precompile_*.jl file * release * Update README.md [skip ci] * don't catch all the MethodErrors (#87) * don't catch all the MethodErrors * remove `@show` * 0.3.3 [skip ci] * add mesh3d for GR * v0.3.4 * Small improvement in inferrability (#82) * 1.1.2 [skip ci] * CI: tentative fix * CI: add LinearAlgebra (#96) Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> * Test for error value from `apply_recipe` fallback. (#95) * v0.3.5 [skip ci] * Add `Downloads` test dependency Complement #3766 * Remove try/catch needed for compatibility with Plots.jl v1.21.0 and earlier (#97) * Improve groups perf from O(MxN) to O(M) (#98) * Update MakieRecipes URL * Update precompile_*.jl file (#91) * v0.3.6 [skip ci] * Revert try/catch for patch version * v0.3.7 (#101) [skip ci] * v0.4.0 (#102) [skip ci] * Avoid Vararg UnionAll dispatch (#104) * Avoid Vararg UnionAll dispatch Fixes JuliaPlots/RecipesPipeline.jl#103 * fix fix Co-authored-by: Simon Christ <SimonChrist@gmx.de> * 0.4.1 [skip ci] * move layout macro from plots (#85) * 1.2.0 [skip ci] * remove pct * 1.2.1 [skip ci] * Update Project.toml * respect defaults for fillrange and ribbon (#106) * respect defaults for fillrange and ribbon * remove fillrange and ribbon handling from RecipesPipeline * update ci * set version * Update CI.yml * move documentation to gh-actions * update run commands * Update Documentation.yml * Allow `NanMath` 1.0 - bump version (#108) Co-authored-by: t-bltg <tf.bltg@gmail.com> * Fix `unzip` for empty vectors (#110) * 0.5.2 [skip ci] * update url with https://docs.juliaplots.org/stable/generated/supported/#Keyword-Arguments (#89) * Update precompile_*.jl file (#109) Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> * run snoopcompile on pust to master only * update compat bounds (#111) * 0.6.0 [skip ci] * Update precompile_*.jl file (#112) Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> * `SnoopCompile` labels * use ssh key for `TagBot` (#91) * fix julia scripts in markdown (#90) * add missing language specification in md * replace type with struct * fix `SnoopCompile` (#113) * update compat bounds * run snoop on master only * update precompile * Update precompile_*.jl file (#114) Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> * 0.6.1 [skip ci] * fix plotting `Union{Missing,Real}` arrays (#116) * Update precompile_*.jl file (#115) Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> * 0.6.2 [skip ci] * fix formatters (#118) * 0.6.3 [skip ci] * Update precompile_*.jl file (#117) Co-authored-by: BeastyBlacksmith <BeastyBlacksmith@users.noreply.github.com> * Create invalidations.yml (#93) This is based on https://github.com/julia-actions/julia-invalidations. Adding such checks came up in https://discourse.julialang.org/t/potential-performance-regressions-in-julia-1-8-for-special-un-precompiled-type-dispatches-and-how-to-fix-them/86359. I suggest to add this check here since this package is widely used as a dependency. * rework precompilation using `SnoopPrecompile` - document `@layout` (#94) * document `@layout` * rewok precompile statements using `SnoopPrecompile` * add ci * bump julia to `1.6` for failing CI * 1.3.0 * more efficient `DefaultsDict` iteration (#121) * bump julia version in `ci` (#122) * 0.6.4 * Add methods to access separate keysets of the DefaultsDict (#124) * bump version [skip ci] * DefaultsDict - correctness and performance tweaks for large numbers of series (#126) * 0.6.6 [skip ci] * Fix a deprecated syntax in docs of macro `@recipe` (#95) * fix broken docs * remove * remove un-needed files * RP tests Co-authored-by: Daniel Schwabeneder <daschw@disroot.org> Co-authored-by: Sebastian Micluța-Câmpeanu <m.c.sebastian95@gmail.com> Co-authored-by: Sebastian Micluța-Câmpeanu <31181429+SebastianM-C@users.noreply.github.com> Co-authored-by: Anshul Singhvi <asinghvi17@simons-rock.edu> Co-authored-by: Lirimy <31124605+Lirimy@users.noreply.github.com> Co-authored-by: mtsch <matijacufar@gmail.com> Co-authored-by: Simon Christ <SimonChrist@gmx.de> Co-authored-by: JonasIsensee <jonas.isensee@web.de> Co-authored-by: Michael Abbott <me@pseudomac> Co-authored-by: Benoit Pasquier <4486578+briochemc@users.noreply.github.com> Co-authored-by: Michael Krabbe Borregaard <mkborregaard@snm.ku.dk> Co-authored-by: Adrian Dawid <dwd31415@users.noreply.github.com> Co-authored-by: Moelf <proton@jling.dev> Co-authored-by: Oliver Schulz <oschulz@mpp.mpg.de> Co-authored-by: daschw <daschw@users.noreply.github.com> Co-authored-by: Moelf <Moelf@users.noreply.github.com> Co-authored-by: Jeremy Bejanin <jeremy.bejanin@gmail.com> Co-authored-by: t-bltg <t-bltg@users.noreply.github.com> Co-authored-by: Tim Holy <tim.holy@gmail.com> Co-authored-by: Nicholas Bauer <nicholasbauer@outlook.com> Co-authored-by: Mike Keehan <21029749+mdkeehan@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Christopher Rackauckas <chrisrackauckas@gmail.com> Co-authored-by: Kristoffer Carlsson <kcarlsson89@gmail.com> Co-authored-by: Yuto Horikawa <hyrodium@gmail.com> Co-authored-by: Rafael Schouten <rafaelschouten@gmail.com> Co-authored-by: MrHenning <5331081+MrHenning@users.noreply.github.com> Co-authored-by: BeastyBlacksmith <BeastyBlacksmith@users.noreply.github.com> Co-authored-by: Hendrik Ranocha <ranocha@users.noreply.github.com> Co-authored-by: Ryan <25192197+singularitti@users.noreply.github.com>
Make arrays of distributions work
Current TODO list (assume
y = rand(10)
for the examples):grid
keyword. This should display a plot without the grid lines:plot(y, grid=false)
plot(vcat(1:10, NaN, 12:21), vcat(y,NaN,y))
plot(y, xticks=nothing, yticks=nothing)
The text was updated successfully, but these errors were encountered: