[Rd] some (may be related) problems with windows(rescale=) (PR#794)
joehl@web.de
joehl@web.de
Thu, 28 Dec 2000 20:04:18 +0100 (MET)
###############################################################################
Before reporting 4 problems with windows(rescale=) I want to congrat on R1.2 and to thank r-developers for quickly adding the rescale workaround to the windows version.
Happy New Year
Jens Oehlschlaegel
###############################################################################
###############################################################################
## windows(rescale="fixed") does not keep original device size
## (probably device initialization error)
###############################################################################
dev.show <- function(){
din <- par("din")
c(width=din[1], height=din[2], aspectratio=din[1]/din[2])
}
width <- 42/2.54
height <- 29.7/2.54
> width
[1] 16.53543
> height
[1] 11.69291
> width/height
[1] 1.414141
> windows(width=width, height=height, rescale="R")
> dev.show()
width height aspectratio
9.229167 6.385417 1.445351
> dev.off()
null device
1
> windows(width=width, height=height, rescale="fixed")
> dev.show()
width height aspectratio
9.229167 6.385417 1.445351
> dev.off()
null device
1
> windows(width=width, height=height, rescale="fit")
> dev.show()
width height aspectratio
9.229167 6.385417 1.445351
## Shouldn't at least rescale="fixed" give the desired device size and aspect ratio?
## The Help to windows() says:
## Using `"fixed"' will leave
## the plot size unchanged, adding scrollbars if part of the plot is
## obscured. This setting also affects the initial re-scaling if the
## specified window size is too big.
###############################################################################
## windows(rescale="fit") gives strange character sizes
## (looks like device initialization error)
###############################################################################
## In the following examples the created devices seem to be equally initialized with respect to par(din)
## However, with windows(rescale="fit") I observe different par(pin) and different character sizes in text() and strwidth()
width <- 16.53543
height <- 11.69291
windows(width=width, height=height, rescale="fixed")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"fixed", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
fixed <- temp
windows(width=width, height=height, rescale="fit")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"fit", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
fit <- temp
windows(width=width, height=height, rescale="R")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"R", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
R <- temp
# now compare
fixed
fit
R
> fixed
x y
din 9.2291667 6.3854167
fin 9.2291667 6.3854167
pin 8.0666667 4.6604167
text 0.1394628 0.2896737
> fit
x y
din 9.22916667 6.3854167
fin 9.22916667 6.3854167
pin 8.79000000 5.7337500
text 0.07935154 0.1122302
> R
x y
din 9.2291667 6.3854167
fin 9.2291667 6.3854167
pin 8.0666667 4.6604167
text 0.1394628 0.2896737
> ## It looks like character size of windows(rescale="fit") refers to originally intended device size of
> ## width=16.53543, height=11.69291 as
> fit["text", "x"]/R["din", "x"]*width
[1] 0.1415101
> ## aprox. equal
> fixed["text", "x"]
[1] 0.1405518
## If we now repeat this procedure with device sizes small enough to avoid initial rescaling
## the phenomenon disappears
dev.off()
dev.off()
dev.off()
width <- 9.2291667
height <- 6.3854167
windows(width=width, height=height, rescale="fixed")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"fixed", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
fixed <- temp
windows(width=width, height=height, rescale="fit")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"fit", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
fit <- temp
windows(width=width, height=height, rescale="R")
par("cex")
plot(0:2,0:2, type="n")
text(1,1,"abc\ndef", cex=2)
text(1,0.5,"R", cex=2)
temp <- t(sapply(par(c("din", "fin", "pin")),c))
colnames(temp) <- c("x", "y")
temp <- rbind(temp, text=c(strwidth("abc\ndef", cex=2), strheight("abc\ndef", cex=2)))
R <- temp
# now compare
fixed
fit
R
> fixed
x y
din 9.1666667 6.1562500
fin 9.1666667 6.1562500
pin 8.0041667 4.4312500
text 0.1405518 0.3046544
> fit
x y
din 9.1666667 6.1562500
fin 9.1666667 6.1562500
pin 8.0041667 4.4312500
text 0.1405518 0.3046544
> R
x y
din 9.1666667 6.1562500
fin 9.1666667 6.1562500
pin 8.0041667 4.4312500
text 0.1405518 0.3046544
###############################################################################
## wrong row distances with windows(rescale="fit")
## (looks like device initialization error)
###############################################################################
width <- 16.53543
height <- 11.69291
## as a reference
windows(width=width, height=height, rescale="fixed")
plot(0:2,0:2, type="n")
text(1,1,"there is hardly anything i know for sure\nneither of the future nor of the past\nnor should i know what to ask\nif the person answering was you\n\n(Ernst Jandl, stanzen)"
,cex=2)
## Here rows are too close together
windows(width=width, height=height, rescale="fit")
plot(0:2,0:2, type="n")
text(1,1,"there is hardly anything i know for sure\nneither of the future nor of the past\nnor should i know what to ask\nif the person answering was you\n\n(Ernst Jandl, stanzen)"
,cex=3)
## Specifying smaller device size thus avoiding initial rescaling
## makes the problem disappear
width <- 9
height <- 6
windows(width=width, height=height, rescale="fit")
plot(0:2,0:2, type="n")
text(1,1,"there is hardly anything i know for sure\nneither of the future nor of the past\nnor should i know what to ask\nif the person answering was you\n\n(Ernst Jandl, stanzen)"
,cex=3)
## Once correctly initialized further rescaling using the mouse does retain correct distances
dev.off()
dev.off()
dev.off()
###############################################################################
## windows(rescale="fit") destroys aspect ratio
## (looks like device initialization error)
###############################################################################
dev.show <- function(){
din <- par("din")
c(width=din[1], height=din[2], aspectratio=din[1]/din[2])
}
width <- 42/2.54
height <- 29.7/2.54
> width
[1] 16.53543
> height
[1] 11.69291
> width/height
[1] 1.414141
## create a device
> windows(width=width, height=height, rescale="fit")
> dev.show()
width height aspectratio
9.229167 6.385417 1.445351
## some resizing of the window BEFORE plot() is called
# par("din") doesn't SEEM to change
> dev.show()
width height aspectratio
9.229167 6.385417 1.445351
# but in fact calling plot() and dev.show()
> plot(0,0)
> dev.show()
width height aspectratio
6.321506 5.562500 1.136451
## now some resizing of the window AFTER plot() is called
> dev.show()
width height aspectratio
4.708333 4.500471 1.046187
> dev.show()
width height aspectratio
4.718750 3.297956 1.430811
> dev.show()
width height aspectratio
3.3255361 4.4375000 0.7494166
> dev.show()
width height aspectratio
1.4091170 5.1145833 0.2755096
> dev.show()
width height aspectratio
1.4062500 5.1145833 0.2749491
> dev.show()
width height aspectratio
0.4701945 3.3854167 0.1388882
## we got very differing aspect ratios
## One reason for that COULD be that the initially intended device sizes are not kept,
## so that many rescalings cumulate the deviations.
## May be par(din) should not be changed at all (keep the representation layer stable)
## and only apply rescaling/zooming/scrolling only to the graphical presentation.
###############################################################################
--please do not edit the information below--
Version:
platform = i386-pc-mingw32
arch = x86
os = Win32
system = x86, Win32
status =
major = 1
minor = 2.0
year = 2000
month = 12
day = 15
language = R
Windows NT 4.0 (build 1381) Service Pack 6
Search Path:
.GlobalEnv, package:ctest, Autoloads, package:base
______________________________________________________________________________
Die Fachpresse ist sich einig: WEB.DE 15mal Testsieger! Kostenlos E-Mail,
Fax, SMS, Verschlüsselung, POP3, WAP....testen Sie uns! http://freemail.web.de
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._