From 5e968e0aa84aa369ad4b5a8a19f761a40431740b Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Wed, 30 Aug 2017 22:19:13 +0200 Subject: [PATCH] ticks to axes --- src/axes.jl | 16 ++++++++++++-- src/backends/glvisualize.jl | 12 +++++++---- src/backends/gr.jl | 4 ++-- src/backends/pyplot.jl | 43 +++++++++++++++++++------------------ 4 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/axes.jl b/src/axes.jl index 58134c29..6d321594 100644 --- a/src/axes.jl +++ b/src/axes.jl @@ -523,9 +523,15 @@ function axis_drawing_info(sp::Subplot) invf = invscalefunc(yaxis[:scale]) t1 = invf(f(ymin) + 0.015*(f(ymax)-f(ymin))) t2 = invf(f(ymax) - 0.015*(f(ymax)-f(ymin))) + t3 = invf(f(0) - 0.015*(f(ymax)-f(ymin))) for xtick in xticks[1] - push!(xaxis_segs, (xtick, ymin), (xtick, t1)) # bottom tick + tick_start, tick_stop = if sp[:framestyle] == :origin + (0, xaxis[:mirror] ? -t3 : t3) + else + xaxis[:mirror] ? (ymax, t2) : (ymin, t1) + end + push!(xaxis_segs, (xtick, tick_start), (xtick, tick_stop)) # bottom tick # sp[:draw_axes_border] && push!(xaxis_segs, (xtick, ymax), (xtick, t2)) # top tick xaxis[:grid] && push!(xgrid_segs, (xtick, t1), (xtick, t2)) # vertical grid end @@ -540,9 +546,15 @@ function axis_drawing_info(sp::Subplot) invf = invscalefunc(xaxis[:scale]) t1 = invf(f(xmin) + 0.015*(f(xmax)-f(xmin))) t2 = invf(f(xmax) - 0.015*(f(xmax)-f(xmin))) + t3 = invf(f(0) - 0.015*(f(xmax)-f(xmin))) for ytick in yticks[1] - push!(yaxis_segs, (xmin, ytick), (t1, ytick)) # left tick + tick_start, tick_stop = if sp[:framestyle] == :origin + (0, yaxis[:mirror] ? -t3 : t3) + else + yaxis[:mirror] ? (xmax, t2) : (xmin, t1) + end + push!(yaxis_segs, (tick_start, ytick), (tick_stop, ytick)) # left tick # sp[:draw_axes_border] && push!(yaxis_segs, (xmax, ytick), (t2, ytick)) # right tick yaxis[:grid] && push!(ygrid_segs, (t1, ytick), (t2, ytick)) # horizontal grid end diff --git a/src/backends/glvisualize.jl b/src/backends/glvisualize.jl index 974b73b1..34dfdb36 100644 --- a/src/backends/glvisualize.jl +++ b/src/backends/glvisualize.jl @@ -604,7 +604,7 @@ end pointsize(font) = font.pointsize * 2 function draw_ticks( - axis, ticks, isx, lims, m, text = "", + axis, ticks, isx, isorigin, lims, m, text = "", positions = Point2f0[], offsets=Vec2f0[] ) sz = pointsize(axis[:tickfont]) @@ -622,7 +622,11 @@ function draw_ticks( for (cv, dv) in zip(ticks...) x, y = cv, lims[1] - xy = isx ? (x, y) : (y, x) + xy = if isorigin + isx ? (x, 0) : (0, x) + else + isx ? (x, y) : (y, x) + end _pos = m * GeometryTypes.Vec4f0(xy[1], xy[2], 0, 1) startpos = Point2f0(_pos[1], _pos[2]) - axis_gap str = string(dv) @@ -711,10 +715,10 @@ function gl_draw_axes_2d(sp::Plots.Subplot{Plots.GLVisualizeBackend}, model, are if !(xaxis[:ticks] in (nothing, false, :none)) && !(sp[:framestyle] == :none) ticklabels = map(model) do m mirror = xaxis[:mirror] - t, positions, offsets = draw_ticks(xaxis, xticks, true, ylim, m) + t, positions, offsets = draw_ticks(xaxis, xticks, true, sp[:framestyle] == :origin, ylim, m) mirror = xaxis[:mirror] t, positions, offsets = draw_ticks( - yaxis, yticks, false, xlim, m, + yaxis, yticks, false, sp[:framestyle] == :origin, xlim, m, t, positions, offsets ) end diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 177cd1b9..517b48cb 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -793,7 +793,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) flip, mirror = gr_set_xticks_font(sp) for (cv, dv) in zip(xticks...) # use xor ($) to get the right y coords - xi, yi = GR.wctondc(cv, xor(flip, mirror) ? ymax : ymin) + xi, yi = GR.wctondc(cv, sp[:framestyle] == :origin ? 0 : xor(flip, mirror) ? ymax : ymin) # @show cv dv ymin xi yi flip mirror (flip $ mirror) gr_text(xi, yi + (mirror ? 1 : -1) * 5e-3, string(dv)) end @@ -804,7 +804,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) flip, mirror = gr_set_yticks_font(sp) for (cv, dv) in zip(yticks...) # use xor ($) to get the right y coords - xi, yi = GR.wctondc(xor(flip, mirror) ? xmax : xmin, cv) + xi, yi = GR.wctondc(sp[:framestyle] == :origin ? 0 : xor(flip, mirror) ? xmax : xmin, cv) # @show cv dv xmin xi yi gr_text(xi + (mirror ? 1 : -1) * 1e-2, yi, string(dv)) end diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index 62a0b394..5c40f284 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -1040,6 +1040,28 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend}) # ax[:set_title](sp[:title], loc = loc) end + # framestyle + if !ispolar(sp) && !is3d(sp) + if sp[:framestyle] == :semi + intensity = 0.5 + ax[:spines]["right"][:set_alpha](intensity) + ax[:spines]["top"][:set_alpha](intensity) + ax[:spines]["right"][:set_linewidth](intensity) + ax[:spines]["top"][:set_linewidth](intensity) + elseif sp[:framestyle] in (:axes, :origin) + ax[:spines]["right"][:set_visible](false) + ax[:spines]["top"][:set_visible](false) + if sp[:framestyle] == :origin + ax[:spines]["bottom"][:set_position]("zero") + ax[:spines]["left"][:set_position]("zero") + end + elseif sp[:framestyle] in (:grid, :none, :origin) + for (loc, spine) in ax[:spines] + spine[:set_visible](false) + end + end + end + # axis attributes for letter in (:x, :y, :z) axissym = Symbol(letter, :axis) @@ -1091,27 +1113,6 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend}) # this sets the bg color inside the grid ax[set_facecolor_sym](py_color(sp[:background_color_inside])) - # framestyle - if !ispolar(sp) && !is3d(sp) - if sp[:framestyle] == :semi - intensity = 0.5 - ax[:spines]["right"][:set_alpha](intensity) - ax[:spines]["top"][:set_alpha](intensity) - ax[:spines]["right"][:set_linewidth](intensity) - ax[:spines]["top"][:set_linewidth](intensity) - elseif sp[:framestyle] == :axes - ax[:spines]["right"][:set_visible](false) - ax[:spines]["top"][:set_visible](false) - elseif sp[:framestyle] in (:grid, :none, :origin) - for (loc, spine) in ax[:spines] - spine[:set_visible](false) - end - if sp[:framestyle] == :origin - ax[:axhline](y = 0, color= py_color(sp[:xaxis][:foreground_color_axis]), lw = 0.5) - ax[:axvline](x = 0, color= py_color(sp[:yaxis][:foreground_color_axis]), lw = 0.5) - end - end - end end py_drawfig(fig) end