Repository navigation
Filled contour plots #319
Description
Activity
Great, I wasn't aware of the extra Symbols for Legacy Computing block of
Unicode.UnicodePlotsis 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 maybecontourplotwith afilledkwarg).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 ;)
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.Reacted by Johannes HiddingStarted fork at jhidding/UnicodePlots.jl.
Reacted by t-bltgGreat, I would for the moment (subject to evolution) hijack
contourplotby 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
PRhere so that it would be easier to review and add comments.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 theSymbols for Legacy Computingblock (the whole canvas will be filled, and colored).This means that the
FilledCanvas.gridseltypecan probably be restricted toUInt8:grid::Transpose{UInt8,Matrix{UInt8}}as what is currently done for the HeatmapCanvas.
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_betweenfeature that was requested earlier in #254.If you like the idea, I could invest some more time to see if this works.