diff --git a/src/args.jl b/src/args.jl index cf023191..0012bc7e 100644 --- a/src/args.jl +++ b/src/args.jl @@ -943,7 +943,6 @@ const _match_map = KW( :background_color_legend => :background_color_subplot, :background_color_inside => :background_color_subplot, :foreground_color_legend => :foreground_color_subplot, - :foreground_color_grid => :foreground_color_subplot, :foreground_color_title => :foreground_color_subplot, :left_margin => :margin, :top_margin => :margin, @@ -957,6 +956,7 @@ const _match_map2 = KW( :foreground_color_subplot => :foreground_color, :foreground_color_axis => :foreground_color_subplot, :foreground_color_border => :foreground_color_subplot, + :foreground_color_grid => :foreground_color_subplot, :foreground_color_guide => :foreground_color_subplot, :foreground_color_text => :foreground_color_subplot, ) @@ -1091,7 +1091,6 @@ function _update_subplot_colors(sp::Subplot) # foreground colors color_or_nothing!(sp.attr, :foreground_color_subplot) color_or_nothing!(sp.attr, :foreground_color_legend) - color_or_nothing!(sp.attr, :foreground_color_grid) color_or_nothing!(sp.attr, :foreground_color_title) return end @@ -1143,6 +1142,7 @@ function _update_axis_colors(axis::Axis) color_or_nothing!(axis.d, :foreground_color_border) color_or_nothing!(axis.d, :foreground_color_guide) color_or_nothing!(axis.d, :foreground_color_text) + color_or_nothing!(axis.d, :foreground_color_grid) return end diff --git a/src/axes.jl b/src/axes.jl index e53d3ccb..6ac60b7c 100644 --- a/src/axes.jl +++ b/src/axes.jl @@ -490,38 +490,50 @@ function axis_drawing_info(sp::Subplot) ymin, ymax = axis_limits(yaxis) xticks = get_ticks(xaxis) yticks = get_ticks(yaxis) - spine_segs = Segments(2) - grid_segs = Segments(2) + xspine_segs = Segments(2) + yspine_segs = Segments(2) + xgrid_segs = Segments(2) + ygrid_segs = Segments(2) + + f = scalefunc(yaxis[:scale]) + invf = invscalefunc(yaxis[:scale]) + t1 = invf(f(ymin) + 0.015*(f(ymax)-f(ymin))) + t2 = invf(f(ymax) - 0.015*(f(ymax)-f(ymin))) if !(xaxis[:ticks] in (nothing, false)) - f = scalefunc(yaxis[:scale]) - invf = invscalefunc(yaxis[:scale]) - t1 = invf(f(ymin) + 0.015*(f(ymax)-f(ymin))) - t2 = invf(f(ymax) - 0.015*(f(ymax)-f(ymin))) - - push!(spine_segs, (xmin,ymin), (xmax,ymin)) # bottom spine - # push!(spine_segs, (xmin,ymax), (xmax,ymax)) # top spine + push!(xspine_segs, (xmin,ymin), (xmax,ymin)) # bottom spine + # push!(xspine_segs, (xmin,ymax), (xmax,ymax)) # top spine for xtick in xticks[1] - push!(spine_segs, (xtick, ymin), (xtick, t1)) # bottom tick - push!(grid_segs, (xtick, t1), (xtick, t2)) # vertical grid - # push!(spine_segs, (xtick, ymax), (xtick, t2)) # top tick + push!(xspine_segs, (xtick, ymin), (xtick, t1)) # bottom tick + # push!(xspine_segs, (xtick, ymax), (xtick, t2)) # top tick end end + if !(xaxis[:grid] in (nothing, false)) + for xtick in xticks[1] + push!(xgrid_segs, (xtick, t1), (xtick, t2)) # vertical grid + end + end + + f = scalefunc(xaxis[:scale]) + invf = invscalefunc(xaxis[:scale]) + t1 = invf(f(xmin) + 0.015*(f(xmax)-f(xmin))) + t2 = invf(f(xmax) - 0.015*(f(xmax)-f(xmin))) + if !(yaxis[:ticks] in (nothing, false)) - f = scalefunc(xaxis[:scale]) - invf = invscalefunc(xaxis[:scale]) - t1 = invf(f(xmin) + 0.015*(f(xmax)-f(xmin))) - t2 = invf(f(xmax) - 0.015*(f(xmax)-f(xmin))) - - push!(spine_segs, (xmin,ymin), (xmin,ymax)) # left spine - # push!(spine_segs, (xmax,ymin), (xmax,ymax)) # right spine + push!(yspine_segs, (xmin,ymin), (xmin,ymax)) # left spine + # push!(yspine_segs, (xmax,ymin), (xmax,ymax)) # right spine for ytick in yticks[1] - push!(spine_segs, (xmin, ytick), (t1, ytick)) # left tick - push!(grid_segs, (t1, ytick), (t2, ytick)) # horizontal grid - # push!(spine_segs, (xmax, ytick), (t2, ytick)) # right tick + push!(yspine_segs, (xmin, ytick), (t1, ytick)) # left tick + # push!(yspine_segs, (xmax, ytick), (t2, ytick)) # right tick end end - xticks, yticks, spine_segs, grid_segs + if !(yaxis[:grid] in (nothing, false)) + for ytick in yticks[1] + push!(ygrid_segs, (t1, ytick), (t2, ytick)) # horizontal grid + end + end + + xticks, yticks, xspine_segs, yspine_segs, xgrid_segs, ygrid_segs end diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 80b52822..e2e42a26 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -691,10 +691,10 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) ticksize = 0.01 * (viewport_plotarea[2] - viewport_plotarea[1]) # GR.setlinetype(GR.LINETYPE_DOTTED) - if sp[:grid] - GR.grid3d(xtick, 0, ztick, xmin, ymax, zmin, 2, 0, 2) - GR.grid3d(0, ytick, 0, xmin, ymax, zmin, 0, 2, 0) - end + # if sp[:grid] + GR.grid3d(xtick, 0, ztick, xmin, ymax, zmin, 2, 0, 2) + GR.grid3d(0, ytick, 0, xmin, ymax, zmin, 0, 2, 0) + # end GR.axes3d(xtick, 0, ztick, xmin, ymin, zmin, 2, 0, 2, -ticksize) GR.axes3d(0, ytick, 0, xmax, ymin, zmin, 0, 2, 0, ticksize) @@ -709,23 +709,31 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) GR.setwindow(xmin, xmax, ymin, ymax) end - xticks, yticks, spine_segs, grid_segs = axis_drawing_info(sp) + xticks, yticks, xspine_segs, yspine_segs, xgrid_segs, ygrid_segs = axis_drawing_info(sp) # @show xticks yticks #spine_segs grid_segs # draw the grid lines - if sp[:grid] + if !(xaxis[:grid] in (nothing, false)) # gr_set_linecolor(sp[:foreground_color_grid]) # GR.grid(xtick, ytick, 0, 0, majorx, majory) - gr_set_line(1, :dot, sp[:foreground_color_grid]) + gr_set_line(1, :dot, xaxis[:foreground_color_grid]) GR.settransparency(0.5) - gr_polyline(coords(grid_segs)...) + gr_polyline(coords(xgrid_segs)...) + end + if !(yaxis[:grid] in (nothing, false)) + gr_set_line(1, :dot, yaxis[:foreground_color_grid]) + GR.settransparency(0.5) + gr_polyline(coords(ygrid_segs)...) end GR.settransparency(1.0) # spine (border) and tick marks - gr_set_line(1, :solid, sp[:xaxis][:foreground_color_axis]) + gr_set_line(1, :solid, xaxis[:foreground_color_axis]) GR.setclip(0) - gr_polyline(coords(spine_segs)...) + gr_polyline(coords(xspine_segs)...) + gr_set_line(1, :solid, yaxis[:foreground_color_axis]) + GR.setclip(0) + gr_polyline(coords(yspine_segs)...) GR.setclip(1) if !(xticks in (nothing, false)) diff --git a/src/backends/plotly.jl b/src/backends/plotly.jl index 9f764f4c..0a1e25aa 100644 --- a/src/backends/plotly.jl +++ b/src/backends/plotly.jl @@ -5,7 +5,8 @@ const _plotly_attr = merge_with_base_supported([ :annotations, :background_color_legend, :background_color_inside, :background_color_outside, :foreground_color_legend, :foreground_color_guide, - # :foreground_color_grid, :foreground_color_axis, + :foreground_color_grid, + # :foreground_color_axis, :foreground_color_text, :foreground_color_border, :foreground_color_title, :label, @@ -213,7 +214,7 @@ function plotly_axis(axis::Axis, sp::Subplot) letter = axis[:letter] ax = KW( :title => axis[:guide], - :showgrid => sp[:grid], + :showgrid => !(axis[:grid] in (nothing, false)), :zeroline => false, :ticks => "inside", ) @@ -230,7 +231,7 @@ function plotly_axis(axis::Axis, sp::Subplot) ax[:type] = plotly_scale(axis[:scale]) ax[:tickfont] = plotly_font(axis[:tickfont], axis[:foreground_color_text]) ax[:tickcolor] = rgba_string(axis[:foreground_color_border]) - ax[:linecolor] = rgba_string(axis[:foreground_color_border]) + ax[:linecolor] = rgba_string(axis[:foreground_color_grid]) # lims lims = axis[:lims] diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index d67abfcd..4100ccbf 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -1064,8 +1064,8 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend}) lab[:set_family](axis[:tickfont].family) lab[:set_rotation](axis[:rotation]) end - if sp[:grid] - fgcolor = py_color(sp[:foreground_color_grid]) + if !(axis[:grid] in (nothing, false)) + fgcolor = py_color(axis[:foreground_color_grid]) pyaxis[:grid](true, color = fgcolor, linestyle = ":") ax[:set_axisbelow](true) end