Skip to content

Commit 240019c

Browse files
Merge pull request #372 from lindsaycarr/master
more access-gsplot, plus some utils-side edits
2 parents 50e8141 + e2129c4 commit 240019c

File tree

4 files changed

+74
-6
lines changed

4 files changed

+74
-6
lines changed

R/access-gsplot.R

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ lim.gsplot <- function(object, side=NULL, axis = NULL, set.undefined=TRUE, if.nu
104104
if (!is.null(side)) {
105105
side.names <- as.side_name(side)
106106
side.axis <- as.axis(side)
107-
if(!is.null(axis) && side.axis != axis){ warning(paste("side", side, "does not have", axis, "limits"))}
107+
side.wrong.axis <- side.names[side.axis != axis]
108+
if(!is.null(axis) && length(side.wrong.axis) > 0){
109+
warning(paste("no", axis, "axis limits for", paste(side.wrong.axis, collapse="+")))
110+
}
108111
} else {
109112
if (!is.null(axis)){
110113
sides <- as.side(names(sides(object)))
@@ -126,14 +129,23 @@ lim.gsplot <- function(object, side=NULL, axis = NULL, set.undefined=TRUE, if.nu
126129
})
127130
names(lims) <- all.side.names
128131

132+
sides.notexist <- side.names[which(!side.names %in% all.side.names)]
133+
for(s in sides.notexist){
134+
lims[[s]] <- c(NA,NA)
135+
}
136+
129137
if(set.undefined){
130138
# get names of all sides on the same axis (x or y) that are not completely NA
131139
which.undef <- sapply(lims, function(x) all(is.na(x)))
140+
which.undef.names <- names(lims)[which.undef]
141+
# only set undefined lims for sides that exist in the object, skip if the sides do not exist
142+
which.undef.names <- which.undef.names[which.undef.names %in% all.side.names]
143+
which.def.names <- names(lims)[!which.undef]
132144
if(all(which.undef)){
133145
lims <- NULL
134-
} else {
135-
undef.sides <- as.side(all.side.names[which.undef])
136-
def.sides <- as.side(all.side.names[!which.undef])
146+
} else if(length(which.undef.names) > 0){
147+
undef.sides <- as.side(which.undef.names)
148+
def.sides <- as.side(which.def.names)
137149
if(is.null(side) || side %in% undef.sides){
138150
for (tmp.side in undef.sides){
139151
# find side closest to the undefined side (must be same axis)

R/utils-side.R

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ side_names <- function(object){
1313
#' @return an integer vector of x sides
1414
#' @keywords internal
1515
as.x_side <- function(view.name){
16-
unname(sapply(view.name, function(x) as.numeric(strsplit(x,'[.]')[[1]][2])))
16+
unname(sapply(view.name, function(x) get_sides_x(as.side(x))))
1717
}
1818

1919
#' take a view name and extract the named x sides
@@ -31,7 +31,7 @@ as.x_side_name <- function(view.name){
3131
#' @return an integer vector of y sides
3232
#' @keywords internal
3333
as.y_side <- function(view.name){
34-
unname(sapply(view.name, function(x) as.numeric(strsplit(x,'[.]')[[1]][3])))
34+
unname(sapply(view.name, function(x) get_sides_y(as.side(x))))
3535
}
3636

3737
#' take a view name and extract the named y sides
@@ -248,3 +248,21 @@ set_sides <- function(sides){
248248
}
249249
return(sides)
250250
}
251+
252+
#' return sides that are either x (odd)
253+
#'
254+
#' @param sides an integer vector of any length
255+
#' @return the side that corresponds to x
256+
#' @keywords internal
257+
get_sides_x <- function(sides){
258+
sides[sides %% 2 != 0]
259+
}
260+
261+
#' return sides that are either y (even)
262+
#'
263+
#' @param sides an integer vector of any length
264+
#' @return the side that corresponds to y
265+
#' @keywords internal
266+
get_sides_y <- function(sides){
267+
sides[sides %% 2 == 0]
268+
}

man/get_sides_x.Rd

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/get_sides_y.Rd

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)