Add support for custom tick labels
Also: - Correctly register changes to "plot.layout" - Fix deprecated use of series[:marker[stroke][color/alpha]].
This commit is contained in:
parent
c402161845
commit
3907ae7f21
@ -79,6 +79,58 @@ end
|
|||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function _inspectdr_getaxisticks(ticks, gridlines, xfrm)
|
||||||
|
TickCustom = InspectDR.TickCustom
|
||||||
|
_xfrm(coord) = InspectDR.axis2aloc(Float64(coord), xfrm.spec) #Ensure Float64 - in case
|
||||||
|
|
||||||
|
ttype = ticksType(ticks)
|
||||||
|
if ticks == :native
|
||||||
|
#keep current
|
||||||
|
elseif ttype == :ticks_and_labels
|
||||||
|
pos = ticks[1]; labels = ticks[2]; nticks = length(ticks[1])
|
||||||
|
newticks = TickCustom[TickCustom(_xfrm(pos[i]), labels[i]) for i in 1:nticks]
|
||||||
|
gridlines = InspectDR.GridLinesCustom(gridlines)
|
||||||
|
gridlines.major = newticks
|
||||||
|
gridlines.minor = []
|
||||||
|
gridlines.displayminor = false
|
||||||
|
elseif ttype == :ticks
|
||||||
|
nticks = length(ticks)
|
||||||
|
gridlines.major = Float64[_xfrm(t) for t in ticks]
|
||||||
|
gridlines.minor = []
|
||||||
|
gridlines.displayminor = false
|
||||||
|
elseif isnothing(ticks)
|
||||||
|
gridlines.major = []
|
||||||
|
gridlines.minor = []
|
||||||
|
else #Assume ticks == :native
|
||||||
|
#keep current
|
||||||
|
end
|
||||||
|
|
||||||
|
return gridlines #keep current
|
||||||
|
end
|
||||||
|
|
||||||
|
function _inspectdr_setticks(sp::Subplot, plot, strip, xaxis, yaxis)
|
||||||
|
InputXfrm1D = InspectDR.InputXfrm1D
|
||||||
|
_get_ticks(axis) = :native == axis[:ticks] ? (:native) : get_ticks(sp, axis)
|
||||||
|
wantnative(ticks) = (:native == ticks)
|
||||||
|
|
||||||
|
xticks = _get_ticks(xaxis)
|
||||||
|
yticks = _get_ticks(yaxis)
|
||||||
|
|
||||||
|
if wantnative(xticks) && wantnative(yticks)
|
||||||
|
#Don't "eval" tick values
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
#TODO: Allow InspectDR to independently "eval" x or y ticks
|
||||||
|
ext = InspectDR.getextents_aloc(plot, 1)
|
||||||
|
grid = InspectDR._eval(strip.grid, plot.xscale, strip.yscale, ext)
|
||||||
|
grid.xlines = _inspectdr_getaxisticks(xticks, grid.xlines, InputXfrm1D(plot.xscale))
|
||||||
|
grid.ylines = _inspectdr_getaxisticks(yticks, grid.ylines, InputXfrm1D(strip.yscale))
|
||||||
|
strip.grid = grid
|
||||||
|
end
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
function _inspectdr_getscale(s::Symbol, yaxis::Bool)
|
function _inspectdr_getscale(s::Symbol, yaxis::Bool)
|
||||||
#TODO: Support :asinh, :sqrt
|
#TODO: Support :asinh, :sqrt
|
||||||
kwargs = yaxis ? (:tgtmajor=>8, :tgtminor=>2) : () #More grid lines on y-axis
|
kwargs = yaxis ? (:tgtmajor=>8, :tgtminor=>2) : () #More grid lines on y-axis
|
||||||
@ -167,6 +219,7 @@ function _series_added(plt::Plot{InspectDRBackend}, series::Series)
|
|||||||
st = series[:seriestype]
|
st = series[:seriestype]
|
||||||
sp = series[:subplot]
|
sp = series[:subplot]
|
||||||
plot = sp.o
|
plot = sp.o
|
||||||
|
clims = get_clims(sp, series)
|
||||||
|
|
||||||
#Don't do anything without a "subplot" object: Will process later.
|
#Don't do anything without a "subplot" object: Will process later.
|
||||||
if nothing == plot; return; end
|
if nothing == plot; return; end
|
||||||
@ -256,8 +309,8 @@ For st in :shape:
|
|||||||
wfrm.glyph = InspectDR.glyph(
|
wfrm.glyph = InspectDR.glyph(
|
||||||
shape = _inspectdr_mapglyph(series[:markershape]),
|
shape = _inspectdr_mapglyph(series[:markershape]),
|
||||||
size = _inspectdr_mapglyphsize(series[:markersize]),
|
size = _inspectdr_mapglyphsize(series[:markersize]),
|
||||||
color = _inspectdr_mapcolor(plot_color(series[:markerstrokecolor], series[:markerstrokealpha])),
|
color = _inspectdr_mapcolor(plot_color(get_markerstrokecolor(series), get_markerstrokealpha(series))),
|
||||||
fillcolor = _inspectdr_mapcolor(plot_color(series[:markercolor], series[:markeralpha])),
|
fillcolor = _inspectdr_mapcolor(plot_color(get_markercolor(series, clims), get_markeralpha(series))),
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -302,18 +355,27 @@ function _inspectdr_setupsubplot(sp::Subplot{InspectDRBackend})
|
|||||||
xmin, xmax = -rmax, rmax
|
xmin, xmax = -rmax, rmax
|
||||||
ymin, ymax = -rmax, rmax
|
ymin, ymax = -rmax, rmax
|
||||||
end
|
end
|
||||||
plot.xext = InspectDR.PExtents1D() #reset
|
|
||||||
strip.yext = InspectDR.PExtents1D() #reset
|
|
||||||
plot.xext_full = InspectDR.PExtents1D(xmin, xmax)
|
plot.xext_full = InspectDR.PExtents1D(xmin, xmax)
|
||||||
strip.yext_full = InspectDR.PExtents1D(ymin, ymax)
|
strip.yext_full = InspectDR.PExtents1D(ymin, ymax)
|
||||||
|
#Set current extents = full extents (needed for _eval(strip.grid,...))
|
||||||
|
plot.xext = plot.xext_full
|
||||||
|
strip.yext = strip.yext_full
|
||||||
|
_inspectdr_setticks(sp, plot, strip, xaxis, yaxis)
|
||||||
|
|
||||||
a = plot.annotation
|
a = plot.annotation
|
||||||
a.title = sp[:title]
|
a.title = sp[:title]
|
||||||
a.xlabel = xaxis[:guide]; a.ylabels = [yaxis[:guide]]
|
a.xlabel = xaxis[:guide]; a.ylabels = [yaxis[:guide]]
|
||||||
|
|
||||||
l = plot.layout
|
l = plot.layout
|
||||||
|
#IMPORTANT: Don't forget to actually register changes
|
||||||
|
#(TODO: need to find a better way to set layout properties)
|
||||||
l[:frame_canvas].fillcolor = _inspectdr_mapcolor(sp[:background_color_subplot])
|
l[:frame_canvas].fillcolor = _inspectdr_mapcolor(sp[:background_color_subplot])
|
||||||
|
l[:frame_canvas] = l[:frame_canvas] #register changes
|
||||||
l[:frame_data].fillcolor = _inspectdr_mapcolor(sp[:background_color_inside])
|
l[:frame_data].fillcolor = _inspectdr_mapcolor(sp[:background_color_inside])
|
||||||
|
l[:frame_data] = l[:frame_data] #register changes
|
||||||
|
|
||||||
l[:frame_data].line.color = _inspectdr_mapcolor(xaxis[:foreground_color_axis])
|
l[:frame_data].line.color = _inspectdr_mapcolor(xaxis[:foreground_color_axis])
|
||||||
|
l[:frame_data] = l[:frame_data] #register changes
|
||||||
l[:font_title] = InspectDR.Font(sp[:titlefontfamily],
|
l[:font_title] = InspectDR.Font(sp[:titlefontfamily],
|
||||||
_inspectdr_mapptsize(sp[:titlefontsize]),
|
_inspectdr_mapptsize(sp[:titlefontsize]),
|
||||||
color = _inspectdr_mapcolor(sp[:titlefontcolor])
|
color = _inspectdr_mapcolor(sp[:titlefontcolor])
|
||||||
@ -334,6 +396,7 @@ function _inspectdr_setupsubplot(sp::Subplot{InspectDRBackend})
|
|||||||
color = _inspectdr_mapcolor(sp[:legendfontcolor])
|
color = _inspectdr_mapcolor(sp[:legendfontcolor])
|
||||||
)
|
)
|
||||||
l[:frame_legend].fillcolor = _inspectdr_mapcolor(sp[:background_color_legend])
|
l[:frame_legend].fillcolor = _inspectdr_mapcolor(sp[:background_color_legend])
|
||||||
|
l[:frame_legend] = l[:frame_legend] #register changes
|
||||||
end
|
end
|
||||||
|
|
||||||
# called just before updating layout bounding boxes... in case you need to prep
|
# called just before updating layout bounding boxes... in case you need to prep
|
||||||
@ -347,8 +410,9 @@ function _before_layout_calcs(plt::Plot{InspectDRBackend})
|
|||||||
#Don't use window_title... probably not what you want.
|
#Don't use window_title... probably not what you want.
|
||||||
#mplot.title = plt[:window_title]
|
#mplot.title = plt[:window_title]
|
||||||
end
|
end
|
||||||
mplot.layout[:frame].fillcolor = _inspectdr_mapcolor(plt[:background_color_outside])
|
|
||||||
|
|
||||||
|
mplot.layout[:frame].fillcolor = _inspectdr_mapcolor(plt[:background_color_outside])
|
||||||
|
mplot.layout[:frame] = mplot.layout[:frame] #register changes
|
||||||
resize!(mplot.subplots, length(plt.subplots))
|
resize!(mplot.subplots, length(plt.subplots))
|
||||||
nsubplots = length(plt.subplots)
|
nsubplots = length(plt.subplots)
|
||||||
for (i, sp) in enumerate(plt.subplots)
|
for (i, sp) in enumerate(plt.subplots)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user