Skip to content

Commit f911146

Browse files
committed
Merge pull request #270 from ldecicco-USGS/master
Axis fixes
2 parents 4c48bb2 + fd82726 commit f911146

File tree

19 files changed

+204
-39
lines changed

19 files changed

+204
-39
lines changed

NAMESPACE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export(segments)
3232
export(symbols)
3333
export(text)
3434
export(title)
35+
export(view_info)
3536
export(xlim)
3637
export(ylim)
3738
exportMethods(gsplot)

R/access-gsplot.R

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,28 @@ logged.gsplot <- function(object, side=NULL){
7272
lapply(views(object), function(x) x$window$log) %>%
7373
setNames(names)
7474
}
75+
}
76+
77+
#' Get view information from a gsplot object
78+
#'
79+
#' get the views in gsplot object
80+
#'
81+
#' @param object a gsplot object
82+
#' @return data frame with one row per view. Each view has an x side, y side, the log command, and the view index.
83+
#' @export
84+
view_info <- function(object){
85+
j <- which(names(object) %in% 'view')
86+
viewSides <- sapply(j, function(x) object[[x]][['window']][['side']])
87+
viewLogs <- sapply(j, function(x) object[[x]][['window']][['log']])
88+
viewInfo <- data.frame(t(rbind(viewSides, viewLogs, j)), stringsAsFactors = FALSE)
89+
names(viewInfo) <- c("x","y","log","index")
90+
91+
for(dir in c("y","x")){
92+
dup_index <- which(duplicated(viewInfo[dir]) | duplicated(viewInfo[dir], fromLast=TRUE))
93+
viewInfo$log[dup_index[-grep(dir,viewInfo$log)]] <- paste0(dir,viewInfo$log[dup_index[-grep(dir,viewInfo$log)]])
94+
}
95+
96+
viewInfo[,c("x","y","index")] <- sapply(viewInfo[,c("x","y","index")], function(x) as.integer(x))
97+
98+
return(viewInfo)
7599
}

R/axis.R

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,40 @@
2424
#' gs <- gsplot() %>%
2525
#' points(y=c(3,1,2), x=1:3, xlim=c(0,NA),ylim=c(0,NA)) %>%
2626
#' axis(side=c(4), labels=FALSE) %>%
27-
#' axis(side=c(1,3), n.minor=4, labels=FALSE)
27+
#' axis(side=c(1,3), n.minor=4)
2828
#' gs
2929
#'
3030
#' gs <- gsplot() %>%
3131
#' points(1:10, 1:10) %>%
32-
#' axis(1, at = seq(0,10,by=0.1),labels=FALSE, tcl=0.15)
32+
#' axis(1, at = seq(0,10,by=0.1),labels=FALSE, tcl=0.15) %>%
33+
#' axis(2, reverse=TRUE)
3334
#' gs
3435
#'
3536
#' gs <- gsplot() %>%
3637
#' points(1:5, c(1,10,100,1000,10000), log="y", las=1) %>%
37-
#' axis(side=c(2,4), labels=FALSE, n.minor=4)
38+
#' axis(side=c(2,4), n.minor=4)
3839
#' gs
40+
#'
3941
#' gs <- gsplot() %>%
4042
#' lines(1:5, c(1,10,100,1000,10000), log="y", axes=FALSE) %>%
4143
#' axis(side=c(2,4), labels=FALSE, n.minor=4)
4244
#' gs
45+
#'
46+
#' gs <- gsplot(xaxs='r', yaxs='r') %>%
47+
#' lines(1:5, c(1,10,100,1000,10000), log="y", xaxt='n') %>%
48+
#' axis(side=c(2,4), labels=FALSE, n.minor=4)
49+
#' gs
50+
#'
51+
#' gs <- gsplot() %>%
52+
#' points(runif(30, 1,5), runif(30,0.5,3.5)) %>%
53+
#' axis(side=1, at=seq(1,5,by=0.25),las=3) %>%
54+
#' axis(side=c(3,4), labels=FALSE)
55+
#' gs
56+
#'
57+
#' usrDef <- gsplot(mar=c(4,4,4,4)) %>%
58+
#' points(x=1, y=2, side=c(3,2), cex=3, xlab='cat',log='x') %>%
59+
#' points(x=3:10,y=4:11, side=c(1,2), log='y')
60+
#' usrDef
4361
axis <- function(object, ...) {
4462
override("graphics", "axis", object, ...)
4563
}
@@ -69,10 +87,11 @@ axis.gsplot <- function(object, ..., n.minor=0, tcl.minor=0.15, reverse=NULL) {
6987
}
7088

7189
draw_axis <- function(gsplot) {
72-
73-
for(index in which(names(gsplot) %in% "axis")){
90+
91+
draw_axis_execute <- function(axisParams,n.minor){
7492
axisParams <- gsplot[[index]][['arguments']]
7593
n.minor <- gsplot[[index]][['gs.config']]$n.minor
94+
7695
if(n.minor == 0){
7796
axis(axisParams)
7897
} else {
@@ -81,14 +100,36 @@ draw_axis <- function(gsplot) {
81100
#Minor axis:
82101
at <- axTicks(axisParams$side)
83102
newAT <- c()
103+
104+
if(axisParams$side %% 2 == 0){
105+
logScale <- par()$ylog
106+
} else {
107+
logScale <- par()$xlog
108+
}
109+
110+
if(logScale){
111+
spacing <- median(diff(log10(at)))
112+
at <- c(10^(log10(at[1])-spacing),at,10^(log10(at[length(at)])+spacing))
113+
} else {
114+
spacing <- median(diff(at))
115+
at <- c(at[1]-spacing,at,at[length(at)]+spacing)
116+
}
117+
84118
for(i in 2:length(at)){
85119
newAT <- c(newAT, seq(at[i-1], length.out = n.minor, by= (at[i]-at[i-1])/n.minor))
86120
}
121+
87122
axisParams$at <- newAT
88123
axisParams$tcl <- gsplot[[index]][['gs.config']]$tcl.minor
89124
axisParams$labels <- FALSE
90125
axis(axisParams)
91126
}
92-
93127
}
128+
129+
for(index in which(names(gsplot) %in% "axis")){
130+
axisParams <- gsplot[[index]][['arguments']]
131+
n.minor <- gsplot[[index]][['gs.config']]$n.minor
132+
draw_axis_execute(axisParams, n.minor)
133+
}
134+
94135
}

R/calc_views.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ set_window <- function(list){
261261
param <- c("axes","ann","frame.plot") #Add panel.first, panel.last, asp, and "main","sub","frame.plot"...without breaking title
262262
varPar <- c("xaxs","yaxs","xaxt","yaxt","las")
263263

264-
window[param] <- TRUE
264+
window[param[!(param %in% names(window))]] <- TRUE
265265

266266
for(i in names(plots)){
267267
for(k in param){

R/print.R

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,41 +40,58 @@ print.gsplot <- function(x, ...){
4040
plot.new()
4141
}
4242

43-
top.par <- par(no.readonly=T)
43+
i <- which(names(views) %in% 'axis')
44+
definded.sides <- sapply(i, function(x) views[[x]][['arguments']][['side']])
45+
46+
view.info <- view_info(views)
47+
view.sides.drawn <- NULL
48+
4449
for (i in which(names(views) %in% 'view')){
45-
# par(top.par)
50+
4651
plots = views[[i]]
4752
plots[['window']] <- NULL
4853
window = views[[i]][['window']]
4954

5055
par(views[['par']])
5156

5257
par(window[['par']])
53-
plot.window(xlim = window$xlim, ylim = window$ylim, log = window$log)
54-
55-
# -- call functions --
56-
to_gsplot(lapply(plots, function(x) x[!names(x) %in% 'legend.name']))
57-
58+
plot.window(xlim = window$xlim, ylim = window$ylim, log = view.info$log[i==view.info$index])
5859

59-
if(window$axes){
60-
Axis(side=window$side[1],x=window$xlim)
61-
Axis(side=window$side[2],x=window$ylim)
60+
sides.not.defined <- window$side[!(window$side %in% definded.sides)]
61+
62+
if(!is.null(view.sides.drawn)){
63+
view.sides.drawn <- sides.not.defined[-view.sides.drawn]
6264
}
63-
65+
66+
if(window$axes){
67+
for(j in sides.not.defined){
68+
if(j %% 2 != 0){
69+
Axis(side=j,x=window$xlim)
70+
} else {
71+
Axis(side=j,x=window$ylim)
72+
}
73+
view.sides.drawn <- append(view.sides.drawn, j)
74+
}
75+
}
76+
6477
if(window$ann){
6578
mtext(text=window$xlab, side=window$side[1], line = 2)
6679
mtext(text=window$ylab, side=window$side[2], line = 2)
6780
}
6881

82+
# -- call functions --
83+
to_gsplot(lapply(plots, function(x) x[!names(x) %in% 'legend.name']))
84+
6985
par(new=TRUE)
7086
}
7187

88+
draw_axis(views)
89+
7290
if(window$frame.plot){
7391
box()
7492
}
7593

7694
draw_legend(views)
77-
draw_axis(views)
7895

7996
}
8097

README.Rmd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ gs <- gsplot() %>%
5454
lines(c(3,4,3), c(2,4,6), legend.name="Lines", ylab="logged y axis", xlab="logged x axis", log='xy') %>%
5555
callouts(x=8, y=4, lwd=2, angle=45, labels="Not sure about this one") %>%
5656
title("logged axes") %>%
57-
axis(side=c(1,2,3,4), labels=FALSE, n.minor=4)
57+
axis(side=c(1,2,3,4), labels=FALSE, n.minor=4) %>%
58+
axis(side=c(1,2))
5859
gs
5960
```
6061

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ gs <- gsplot() %>%
5151
lines(c(3,4,3), c(2,4,6), legend.name="Lines", ylab="logged y axis", xlab="logged x axis", log='xy') %>%
5252
callouts(x=8, y=4, lwd=2, angle=45, labels="Not sure about this one") %>%
5353
title("logged axes") %>%
54-
axis(side=c(1,2,3,4), labels=FALSE, n.minor=4)
54+
axis(side=c(1,2,3,4), labels=FALSE, n.minor=4) %>%
55+
axis(side=c(1,2))
5556
gs
5657
```
5758

11 Bytes
Loading
3 Bytes
Loading
79 Bytes
Loading

0 commit comments

Comments
 (0)