Hi Mark,
This is a very good suggestion, you are right, ggsave doesn't work for
tracks object now, and that's very annoying.
For now, you can simply remove the check command(first two lines) in
ggsave() and make sure any object could be saved, that works, if you
pass a
tracks object in the function. But won't work if you simply run ggsave
without tracks name, because by default, last_plot() only capture
single
plot. Below is a sample code, you can run it and use it just for now,
I am
thinking about implementing in a more general way in ggbio devel and
will
let you know later .
ggbiosave <- function (filename = default_name(plot), plot =
last_plot(),
device = default_device(filename), path = NULL,
scale = 1,
width = par("din")[1], height = par("din")[2],
units
= c("in",
"cm", "mm"), dpi = 300, limitsize = TRUE, ...)
{
## simply comment out the check part
## if (!inherits(plot, "ggplot"))
## stop("plot should be a ggplot2 plot")
eps <- ps <- function(..., width, height)
grDevices::postscript(...,
width = width, height = height, onefile = FALSE, horizontal =
FALSE,
paper = "special")
tex <- function(..., width, height) grDevices::pictex(...,
width = width, height = height)
pdf <- function(..., version = "1.4") grDevices::pdf(...,
version = version)
svg <- function(...) grDevices::svg(...)
wmf <- function(..., width, height) grDevices::win.metafile(...,
width = width, height = height)
emf <- function(..., width, height) grDevices::win.metafile(...,
width = width, height = height)
png <- function(..., width, height) grDevices::png(..., width =
width,
height = height, res = dpi, units = "in")
jpg <- jpeg <- function(..., width, height) grDevices::jpeg(...,
width = width, height = height, res = dpi, units = "in")
bmp <- function(..., width, height) grDevices::bmp(..., width =
width,
height = height, res = dpi, units = "in")
tiff <- function(..., width, height) grDevices::tiff(...,
width = width, height = height, res = dpi, units = "in")
default_name <- function(plot) {
paste(digest.ggplot(plot), ".pdf", sep = "")
}
default_device <- function(filename) {
pieces <- strsplit(filename, "\\.")[[1]]
ext <- tolower(pieces[length(pieces)])
match.fun(ext)
}
units <- match.arg(units)
convert_to_inches <- function(x, units) {
x <- switch(units, `in` = x, cm = x/2.54, mm = x/2.54/10)
}
convert_from_inches <- function(x, units) {
x <- switch(units, `in` = x, cm = x * 2.54, mm = x *
2.54 * 10)
}
if (!missing(width)) {
width <- convert_to_inches(width, units)
}
if (!missing(height)) {
height <- convert_to_inches(height, units)
}
if (missing(width) || missing(height)) {
message("Saving ", prettyNum(convert_from_inches(width *
scale, units), digits = 3), " x ",
prettyNum(convert_from_inches(height *
scale, units), digits = 3), " ", units, " image")
}
width <- width * scale
height <- height * scale
if (limitsize && (width >= 50 || height >= 50)) {
stop("Dimensions exceed 50 inches (height and width are
specified
in inches/cm/mm, not pixels).",
" If you are sure you want these dimensions, use
'limitsize=FALSE'.")
}
if (!is.null(path)) {
filename <- file.path(path, filename)
}
device(file = filename, width = width, height = height, ...)
on.exit(capture.output(dev.off()))
print(plot)
invisible()
}
Thanks
Tengfei
On Thu, Jan 10, 2013 at 8:22 AM, Mark Dunning
<mark.dunning@gmail.com>wrote:
> Hi,
>
> I was just wondering if there was an option to save a 'Tracks'
object
> to disk using a ggsave-like command?
>
> > p<- tracks(p.ideo, Gene =
p1,Probes=p2,main=gene,heights=c(1,5,3))
> > ggsave(p,file="tracks.png")
> Error in ggsave(p, file = "tracks.png") : plot should be a ggplot2
plot
>
> Regards,
>
> Mark
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor@r-project.org
>
https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives:
>
http://news.gmane.org/gmane.science.biology.informatics.conductor
>
--
Tengfei Yin
MCDB PhD student
1620 Howe Hall, 2274,
Iowa State University
Ames, IA,50011-2274
[[alternative HTML version deleted]]