Lauri Nikkinen
2008-Jun-30 12:40 UTC
[R] Plotting question: Problem with strwidth in 2.7.1
R users,
I have a problem with function strwidth in 2.7.1. I'm trying to set
the plot margins in a way that horizontal
column labels will fit to the graph. tmp.t is a list of data.frame
objects. This code works well in 2.6.0.
...snip..
library(gplots)
for (i in names(tmp.t)) {
bmp(filename=paste(i, "_", Sys.Date(), ".bmp",
sep=""),
width=1038, height=820, res=1200)
maxim <- max(strwidth(as.character(colnames(tmp.t[[i]])),
units="inches"))*4.5
opar <- par(mar=c(3,maxim,2,2), bg="white", cex=1.6, oma
c(0, 0, 2, 0), mgp=c(3,0.5,0), xpd=TRUE)
colo <- c("red", "lightblue1",
"orange", "yellow")
xmax <- max(unlist(lapply(tmp.t[i], function(x) apply(x, 2,
sum))) + 15)
bar <- barplot2(tmp.t[[i]],
horiz=TRUE,
names.arg=as.character(colnames(tmp.t[[i]])),
las=1,
cex.names=0.7,
cex.main=0.9,
cex.axis=0.7,
xlim=c(0, xmax),
col=colo,
plot.grid = TRUE
)
box()
dev.off()
}
...snip...
Now running this script I get an error message
Error in plot.new() : figure margins too large
I found from http://cran.r-project.org/src/base/NEWS that
o Use of strwidth/height(units="user") (the default) is again an
error before a user coordinate system has been set on the
device, rather than giving nonsensical values (the effect of
r31367).
Does this have something to do with my problem? How should I modify my
code to get it work in R 2.7.1?
Thanks
Lauri
> sessionInfo()
R version 2.7.1 (2008-06-23)
i386-pc-mingw32
locale:
LC_COLLATE=Finnish_Finland.1252;LC_CTYPE=Finnish_Finland.1252;LC_MONETARY=Finnish_Finland.1252;LC_NUMERIC=C;LC_TIME=Finnish_Finland.1252
attached base packages:
[1] tcltk stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] TeachingDemos_2.2 tkrplot_0.0-18 gplots_2.6.0 gdata_2.4.2
[5] gtools_2.5.0 RODBC_1.2-3
loaded via a namespace (and not attached):
[1] tools_2.7.1
Lauri Nikkinen
2008-Jun-30 13:03 UTC
[R] Plotting question: Problem with strwidth in 2.7.1
Sorry, I found that there is a new bmp() device and when I lower the resolution parameter e.g. to 72, everything works fine. Best Lauri 2008/6/30, Lauri Nikkinen <lauri.nikkinen at iki.fi>:> R users, > > I have a problem with function strwidth in 2.7.1. I'm trying to set > the plot margins in a way that horizontal > column labels will fit to the graph. tmp.t is a list of data.frame > objects. This code works well in 2.6.0. > > ...snip.. > library(gplots) > for (i in names(tmp.t)) { > bmp(filename=paste(i, "_", Sys.Date(), ".bmp", sep=""), > width=1038, height=820, res=1200) > maxim <- max(strwidth(as.character(colnames(tmp.t[[i]])), > units="inches"))*4.5 > opar <- par(mar=c(3,maxim,2,2), bg="white", cex=1.6, oma > c(0, 0, 2, 0), mgp=c(3,0.5,0), xpd=TRUE) > colo <- c("red", "lightblue1", "orange", "yellow") > xmax <- max(unlist(lapply(tmp.t[i], function(x) apply(x, 2, > sum))) + 15) > bar <- barplot2(tmp.t[[i]], > horiz=TRUE, > names.arg=as.character(colnames(tmp.t[[i]])), > las=1, > cex.names=0.7, > cex.main=0.9, > cex.axis=0.7, > xlim=c(0, xmax), > col=colo, > plot.grid = TRUE > ) > box() > dev.off() > } > ...snip... > > Now running this script I get an error message > > Error in plot.new() : figure margins too large > > I found from http://cran.r-project.org/src/base/NEWS that > > o Use of strwidth/height(units="user") (the default) is again an > error before a user coordinate system has been set on the > device, rather than giving nonsensical values (the effect of > r31367). > > Does this have something to do with my problem? How should I modify my > code to get it work in R 2.7.1? > > Thanks > Lauri > > > sessionInfo() > R version 2.7.1 (2008-06-23) > i386-pc-mingw32 > > locale: > LC_COLLATE=Finnish_Finland.1252;LC_CTYPE=Finnish_Finland.1252;LC_MONETARY=Finnish_Finland.1252;LC_NUMERIC=C;LC_TIME=Finnish_Finland.1252 > > attached base packages: > [1] tcltk stats graphics grDevices utils datasets methods > [8] base > > other attached packages: > [1] TeachingDemos_2.2 tkrplot_0.0-18 gplots_2.6.0 gdata_2.4.2 > [5] gtools_2.5.0 RODBC_1.2-3 > > loaded via a namespace (and not attached): > [1] tools_2.7.1 >
Peter Dalgaard
2008-Jun-30 14:06 UTC
[R] Plotting question: Problem with strwidth in 2.7.1
Lauri Nikkinen wrote:> R users, > > I have a problem with function strwidth in 2.7.1. I'm trying to set > the plot margins in a way that horizontal > column labels will fit to the graph. tmp.t is a list of data.frame > objects. This code works well in 2.6.0. > >I don't think this has to do with stringwidth at all:> bmp(filename="foo.bmp",width=1038, height=820, res=1200) > plot(0)Error in plot.new() : figure margins too large (width and height are in pixels, so at 1200dpi, the plotting area is less than one inch. What did you intend?) BTW: The fudge factor of 4.5 might be better estimated from par(c("cin","cex","lheight")).> ...snip.. > library(gplots) > for (i in names(tmp.t)) { > bmp(filename=paste(i, "_", Sys.Date(), ".bmp", sep=""), > width=1038, height=820, res=1200) > maxim <- max(strwidth(as.character(colnames(tmp.t[[i]])), > units="inches"))*4.5 > opar <- par(mar=c(3,maxim,2,2), bg="white", cex=1.6, oma > c(0, 0, 2, 0), mgp=c(3,0.5,0), xpd=TRUE) > colo <- c("red", "lightblue1", "orange", "yellow") > xmax <- max(unlist(lapply(tmp.t[i], function(x) apply(x, 2, > sum))) + 15) > bar <- barplot2(tmp.t[[i]], > horiz=TRUE, > names.arg=as.character(colnames(tmp.t[[i]])), > las=1, > cex.names=0.7, > cex.main=0.9, > cex.axis=0.7, > xlim=c(0, xmax), > col=colo, > plot.grid = TRUE > ) > box() > dev.off() > } > ...snip... > > Now running this script I get an error message > > Error in plot.new() : figure margins too large > > I found from http://cran.r-project.org/src/base/NEWS that > > o Use of strwidth/height(units="user") (the default) is again an > error before a user coordinate system has been set on the > device, rather than giving nonsensical values (the effect of > r31367). > > Does this have something to do with my problem? How should I modify my > code to get it work in R 2.7.1? > > Thanks > Lauri > > >> sessionInfo() >> > R version 2.7.1 (2008-06-23) > i386-pc-mingw32 > > locale: > LC_COLLATE=Finnish_Finland.1252;LC_CTYPE=Finnish_Finland.1252;LC_MONETARY=Finnish_Finland.1252;LC_NUMERIC=C;LC_TIME=Finnish_Finland.1252 > > attached base packages: > [1] tcltk stats graphics grDevices utils datasets methods > [8] base > > other attached packages: > [1] TeachingDemos_2.2 tkrplot_0.0-18 gplots_2.6.0 gdata_2.4.2 > [5] gtools_2.5.0 RODBC_1.2-3 > > loaded via a namespace (and not attached): > [1] tools_2.7.1 > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907