@@ -63,7 +63,8 @@ axis <- function(object, ...) {
6363 override(" graphics" , " axis" , object , ... )
6464}
6565
66- axis.gsplot <- function (object , ... , n.minor = 0 , tcl.minor = 0.15 , reverse = NULL ) {
66+ # ' @importFrom utils head
67+ axis.gsplot <- function (object , ... , n.minor = 0 , tcl.minor = 0.15 , reverse = NULL , append = FALSE ) {
6768
6869 fun.name <- " axis"
6970
@@ -76,9 +77,25 @@ axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL) {
7677
7778 for (side in sides ){
7879 # append the side and give it defaults if it doesn't exist
80+
7981 object <- modify_side(object , args = list (), side = side )
82+ which.axis <- which(names(object [[as.side_name(side )]])== ' axis' )
83+ if (append ){
84+ last.axis <- tail(which.axis , 1 ) # get the last one
85+ object [[as.side_name(side )]] <- append(object [[as.side_name(side )]],
86+ list (' axis' = set_args(' axis' , side = side , package = ' graphics' )),
87+ after = last.axis )
88+ object [[as.side_name(side )]][[last.axis + 1 ]] <- append_replace(object [[as.side_name(side )]][[last.axis + 1 ]], user_args [[fun.name ]])
89+ } else {
90+ # remove
91+ if (length(which.axis ) > 1 ){
92+ # remove all axis functions other than the first one
93+ object [[as.side_name(side )]] <- object [[as.side_name(side )]][- which.axis [! which.axis %in% head(which.axis , 1 )]]
94+ }
95+ object [[as.side_name(side )]][[' axis' ]] <- append_replace(object [[as.side_name(side )]][[' axis' ]], user_args [[fun.name ]])
96+ }
8097 object [[as.side_name(side )]][[' usr.axes' ]] <- TRUE
81- object [[as.side_name( side )]][[ ' axis ' ]] <- append_replace( object [[as.side_name( side )]][[ ' axis ' ]], user_args [[ fun.name ]])
98+
8299 if (! is.null(reverse )){
83100 object [[as.side_name(side )]][[' reverse' ]] <- reverse
84101 }
@@ -89,9 +106,19 @@ axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL) {
89106}
90107
91108draw_axis <- function (object , side.name ){
109+ # method isn't made for multiple axis calls
110+ which.axis <- which(names(object [[side.name ]]) == ' axis' )
111+ if (length(which.axis ) > 1 ){
112+ for (axis.i in which.axis ){
113+ tmp <- object
114+ tmp [[side.name ]] <- tmp [[side.name ]][- which.axis [which.axis %in% axis.i ]]
115+ draw_axis(tmp , side.name )
116+ }
117+
118+ }
92119 axis.args <- object [[side.name ]][[' axis' ]]
93120 side.lim <- object [[side.name ]][[' lim' ]]
94-
121+
95122 axis.args $ at <- get_axTicks(object , as.side(side.name ))
96123
97124 # need a cleaner way to extract the non-axis args (such as n.minor and tcl.minor)
@@ -112,9 +139,7 @@ draw_axis <- function(object, side.name){
112139 axis.args $ n.minor <- NULL
113140 axis.args $ tcl.minor <- NULL
114141
115- do.call(' Axis' , axis.args )
116-
117-
142+ do.call(' Axis' , axis.args )
118143
119144 # Minor axis:
120145
@@ -150,4 +175,4 @@ draw_axis <- function(object, side.name){
150175 axis.args $ tcl <- tcl
151176 do.call(' Axis' , axis.args )
152177 }
153- }
178+ }
0 commit comments