Skip to content

Commit 4edaf7f

Browse files
committed
Merge pull request #68 from jread-usgs/master
user specified ylim and xlim
2 parents 94a77c9 + 0440a9a commit 4edaf7f

File tree

6 files changed

+91
-14
lines changed

6 files changed

+91
-14
lines changed

R/calc_views.R

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@ calc_views <- function(gsplot){
1212

1313
usrs <- calc_view_usr(views)
1414

15+
labs <- calc_view_labs(views)
16+
1517
views <- add_view_usr(views, usrs)
1618

19+
views <- add_view_labs(views, labs)
20+
1721
return(views)
1822
}
1923

@@ -47,7 +51,17 @@ add_view_usr <- function(views, usrs){
4751
view_i <- which(names(views) %in% 'view')
4852
for (i in view_i){
4953
sides <- views[[i]][['gs.config']][['side']]
50-
views[[i]][['usr']] <- c(usrs[[sides[1]]][[1]], usrs[[sides[2]]][[1]])
54+
views[[i]][['gs.config']][['usr']] <- c(usrs[[sides[1]]][[1]], usrs[[sides[2]]][[1]])
55+
}
56+
return(views)
57+
}
58+
59+
add_view_labs <- function(views, labs){
60+
view_i <- which(names(views) %in% 'view')
61+
for (i in view_i){
62+
sides <- views[[i]][['gs.config']][['side']]
63+
views[[i]][['gs.config']][['xlab']] <- labs[[sides[1]]]
64+
views[[i]][['gs.config']][['ylab']] <- labs[[sides[2]]]
5165
}
5266
return(views)
5367
}
@@ -65,11 +79,16 @@ calc_view_usr <- function(views){
6579

6680
if ((side %% 2) == 0){
6781
# is y
82+
6883
lims <- lims_from_list(lapply(side_components, var='y', function(list, var) strip_pts(list,var)))
84+
client_lims <- lims_from_client(side_components, var='ylim', side)
85+
lims[!is.na(client_lims)] <- client_lims[!is.na(client_lims)]
6986
usr <- usr_from_lim(lims, type=par()$yaxs)
7087
} else {
7188
# is x
7289
lims <- lims_from_list(lapply(side_components, var='x', function(list, var) strip_pts(list,var)))
90+
client_lims <- lims_from_client(side_components, var='xlim', side)
91+
lims[!is.na(client_lims)] <- client_lims[!is.na(client_lims)]
7392
usr <- usr_from_lim(lims, type=par()$xaxs)
7493
}
7594
sides[[side]] = list(usr=usr)
@@ -79,12 +98,65 @@ calc_view_usr <- function(views){
7998
return(sides)
8099
}
81100

101+
calc_view_labs <- function(views){
102+
103+
#// to do: refactor to eliminate duplicated comb_view methods (like this on and the usr one)
104+
unique_sides <- unique(unlist(lapply(views,function(x)x[['gs.config']][['side']])))
105+
labels <- list()
106+
for (side in unique_sides){
107+
108+
view_i <- which(unlist(lapply(views,function(x)any(x[['gs.config']][['side']]==side))))
109+
110+
# collapse these into a single list of components that reference this side
111+
side_components <- do.call(c,views[view_i])
112+
113+
if ((side %% 2) == 0){
114+
# is y
115+
var = 'ylab'
116+
lab <- labs_from_client(side_components, var=var,side=side)
117+
} else {
118+
# is x
119+
var = 'xlab'
120+
lab <- labs_from_client(side_components, var=var,side=side)
121+
}
122+
123+
labels[[side]] = lab
124+
125+
}
126+
names(labels) <- unique_sides
127+
return(labels)
128+
}
129+
82130
strip_pts <- function(list, var){
83131
if (var %in% names(list))
84132
list[[var]]
85133
else
86134
NA
87135
}
136+
137+
lims_from_client <- function(list, var, side){
138+
client_lims <- lapply(list, var=var, function(list, var) strip_pts(list,var))
139+
client_lims <- client_lims[!is.na(client_lims)]
140+
if (length(client_lims) > 1)
141+
warning('for side ', side,', more than one ',var,' specified. Using last')
142+
143+
if (length(client_lims) == 0)
144+
client_lims <- list(c(NA,NA))
145+
146+
return(client_lims[[length(client_lims)]])
147+
}
148+
149+
labs_from_client <- function(list,var,side){
150+
client_labs <- lapply(list, var=var, function(list, var) strip_pts(list,var))
151+
client_labs <- client_labs[!is.na(client_labs)]
152+
if (length(client_labs) > 1)
153+
warning('for side ', side,', more than one ',var,' specified. Using last')
154+
155+
if (length(client_labs) == 0)
156+
client_labs <- list(NA)
157+
return(client_labs[[length(client_labs)]])
158+
}
159+
88160
lims_from_list <- function(list){
89161
c(min(sapply(list, min),na.rm=TRUE), max(sapply(list, max),na.rm=TRUE))
90162
}
@@ -95,7 +167,7 @@ usr_from_lim <- function(lim, type = 'i', log=FALSE){
95167
stop('log = TRUE not currently supported')
96168
usr <- switch (type,
97169
i = lim,
98-
r = c(lim[1]-0.04*lim[1], lim[2]+0.04*lim[2])
170+
r = c(lim[1]-0.04*diff(lim), lim[2]+0.04*diff(lim))
99171
)
100172
if (diff(usr) == 0){
101173
usr <- c(usr[1]-0.5, usr[2]+0.5)

R/points.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#' @examples
1111
#' gs <- gsplot(list())
1212
#' gsNew <- points(gs, y=1, x=2, col="blue", pch=18)
13-
#' gsNew <- points(gsNew, c(3,4,3), c(2,4,6))
13+
#' gsNew <- points(gsNew, c(3,4,3), c(2,4,6), ylim=c(0,10))
1414
#' gsNew
1515
#' @export
1616
points <- function(object, ...) {

R/print.R

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#' @examples
1010
#' gs <- gsplot(list()) %>%
1111
#' points(1, 2, legend.name="Cool points") %>%
12-
#' lines(x=1:5, y=1:5, legend.name="Cool lines") %>%
12+
#' lines(x=1:5, y=1:5, legend.name="Cool lines", ylab='taco night') %>%
1313
#' legend(location="top")
1414
#' gs
1515
print.gsplot <- function(x, ...){
@@ -23,19 +23,18 @@ print.gsplot <- function(x, ...){
2323
for (i in which(names(views) %in% 'view')){
2424
view = views[[i]]
2525

26-
par(usr=view$usr)
26+
par(usr=view$gs.config$usr)
2727

2828
par(config("par"))
2929

3030
axis(side=view$gs.config$side[1], config("axis"))
3131
axis(side=view$gs.config$side[2], config("axis"))
32-
33-
# par(defaultPar)
34-
# -- call lines --
35-
to_gsplot(view, which(names(view) %in% 'lines'))
36-
37-
# -- call points --
38-
to_gsplot(view, which(names(view) %in% 'points'))
32+
mtext(text=view$gs.config$xlab, view$gs.config$side[1], line = 2)
33+
mtext(text=view$gs.config$ylab, view$gs.config$side[2], line = 2)
34+
35+
# -- call functions --
36+
to_gsplot(view, which(!names(view) %in% 'gs.config'))
37+
3938
par(new=TRUE)
4039
}
4140
box()

man/points.Rd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Add additional functionality to points.
2323
\examples{
2424
gs <- gsplot(list())
2525
gsNew <- points(gs, y=1, x=2, col="blue", pch=18)
26-
gsNew <- points(gsNew, c(3,4,3), c(2,4,6))
26+
gsNew <- points(gsNew, c(3,4,3), c(2,4,6), ylim=c(0,10))
2727
gsNew
2828
}
2929

man/print.gsplot.Rd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ show gsplot
2020
\examples{
2121
gs <- gsplot(list()) \%>\%
2222
points(1, 2, legend.name="Cool points") \%>\%
23-
lines(x=1:5, y=1:5, legend.name="Cool lines") \%>\%
23+
lines(x=1:5, y=1:5, legend.name="Cool lines", ylab='taco night') \%>\%
2424
legend(location="top")
2525
gs
2626
}

tests/testthat/tests-points.R

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ test_that("graphics examples work", {
44

55
plot(-4:4, -4:4, type = "n") # setting up coord. system
66
points(rnorm(200), rnorm(200), col = "red")
7+
8+
dev.off()
9+
plot(-4:4, -4:4, type = "n", xlim=c(0,100000), ylim=c(0,1)) # setting up coord. system
10+
lx <- seq(1, 5, length = 41)
11+
xy = xy.coords(x=10^lx,y=exp(-.5*lx^2))
12+
plot.xy(xy, type='p')
713

814
})
915

0 commit comments

Comments
 (0)