To give you an idea, we can drop tinyAxis() algother, get a ton more flexibility and transparency, and simplify the code as follows:
# axes, frame.plot and grid if (isTRUE(axes)) { args_x = list(x, side = xside, cex = get_tpar(c("cex.xaxs", "cex.axis"), 0.8), col = get_tpar(c("col.xaxs", "col.axis"), "grey90"), lwd = get_tpar(c("lwd.xaxs", "lwd.axis"), 0.5) ) args_y = list(y, side = yside, cex = get_tpar(c("cex.yaxs", "cex.axis"), 0.8), col = get_tpar(c("col.yaxs", "col.axis"), "grey90"), lwd = get_tpar(c("lwd.yaxs", "lwd.axis"), 0.5) ) type_range_x = type %in% c("pointrange", "errorbar", "ribbon", "boxplot", "p") && !is.null(xlabs) type_range_y = isTRUE(flip) && type %in% c("pointrange", "errorbar", "ribbon", "boxplot", "p") && !is.null(ylabs) if (type_range_x) { args_x = modifyList(args_x, list(at = xlabs, labels = names(xlabs))) } if (type_range_y) { args_y = modifyList(args_y, list(at = ylabs, labels = names(ylabs))) } if (isTRUE(frame.plot)) { # if plot frame is true then print axes per normal... do.call(Axis, args_x) do.call(Axis, args_y) } else { # ... else only print the "outside" axes. if (ii %in% oxaxis) do.call(Axis, args_x) if (ii %in% oyaxis) do.call(Axis, args_y) } }