Skip to content
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

Filled contour plots #319

Open
jhidding opened this issue Dec 12, 2022 · 5 comments · May be fixed by #361
Open

Filled contour plots #319

jhidding opened this issue Dec 12, 2022 · 5 comments · May be fixed by #361

Comments

@jhidding
Copy link

Hi, I once created a demo for filled contour plots in the terminal. When I saw this package I thought I might contribute it. The original was in Rust, but I created a small demo in Julia to show what I had in mind: https://github.com/jhidding/UnicodeContour.jl

This code could also be adapted for the fill_between feature that was requested earlier in #254.

If you like the idea, I could invest some more time to see if this works.

@t-bltg
Copy link
Member

t-bltg commented Dec 12, 2022

Great, I wasn't aware of the extra Symbols for Legacy Computing block of Unicode.

UnicodePlots is definitively the right place for this kind of addition.

Even if we use opaque characters instead of braille characters, this could be our implementation for the missing contourf (or maybe contourplot with a filled kwarg).

Could also be useful for drawing polar heatmaps: I wonder if it's possible to render a perfect circle using these characters.

I like this ;)

@t-bltg
Copy link
Member

t-bltg commented Dec 12, 2022

I guess that the first step is creating a new canvas type (Name t.b.d. <: LookupCanvas), similar to https://github.com/JuliaPlots/UnicodePlots.jl/blob/master/src/canvas/blockcanvas.jl#L7-L23, with an adjusted lookup table.

@jhidding
Copy link
Author

jhidding commented Dec 12, 2022

Started fork at jhidding/UnicodePlots.jl.

@t-bltg
Copy link
Member

t-bltg commented Dec 13, 2022

Great, I would for the moment (subject to evolution) hijack contourplot by replacing this line with something like:

if canvas === FilledCanvas
   # TODO: process levels, and fill the canvas

   # Note that displaying the characters is not done here (delayed to using `show`, `display` or `savefig` on the plot)
   # and that is handled in `src/show.jl`: https://github.com/JuliaPlots/UnicodePlots.jl/blob/master/src/show.jl#L301

   # There, each canvas row is printed: since `FilledCanvas` is a subtype of the abstract type `LookupCanvas`,
   # `lookup_decode` must be implemented such that decoding can occur in here:
   # https://github.com/JuliaPlots/UnicodePlots.jl/blob/master/src/canvas/lookupcanvas.jl#L75

   # I would suggest taking inspiration from `src/interface/heatmap.jl` for filling the grid and colors:
   # https://github.com/JuliaPlots/UnicodePlots.jl/blob/master/src/interface/heatmap.jl#L192-L196
else
   contourplot!(plot, x, y, A; colormap, okw...)  # other canvases (BrailleCanvas, ...)
end
plot

, so that you can work your mwe out (TIL himmelblau):

julia> using UnicodePlots
julia> himmelblau(x, y) = (x^2 + y - 11)^2 + (x + y^2 - 7)^2
julia> contourplot(himmelblau; canvas = FilledCanvas, levels = ...)  # would need to adjust `levels` kw to take a vector of levels

It's unlikely a miracle will happen but that's a start ...

You can also open a draft PR here so that it would be easier to review and add comments.

@t-bltg
Copy link
Member

t-bltg commented Dec 13, 2022

Also note that filling FILLED_DECODE[(N_FILLED + 1):typemax(N_FILLED)] = UNICODE_TABLE[1:(typemax(N_FILLED) - N_FILLED)] is un-needed since for this canvas, since we don't plan to add other characters than those from the Symbols for Legacy Computing block (the whole canvas will be filled, and colored).

This means that the FilledCanvas.grids eltype can probably be restricted to UInt8: grid::Transpose{UInt8,Matrix{UInt8}} as what is currently done for the HeatmapCanvas.

@t-bltg t-bltg linked a pull request Aug 11, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants