[R] R to automate scatter plots

R. Michael Weylandt michael.weylandt at gmail.com
Thu Nov 10 20:43:22 CET 2011


I think you are off in the order of calls: you need to open the pdf
and then do all the plots so that they get pushed to the pdf. The
blank plot call won't do anything particularly helpful. If you use
pdf() after most of the plot commands they go to your default device
which is usually printing to the screen -- it's not tricky to copy a
plot from another device to a pdf, but you need to use dev.copy2pdf()
to do so.

Try this

pdf("test.pdf") # Open the pdf driver
plot(1:5) # Put one plot on the pdf
plot(1:6, col = 2) # put a seonc plot on the pdf
dev.off() # close the pdf

On my machine this produces a pdf with two plots.

For your script

pdf()

forloop

dev.off()



On Thu, Nov 10, 2011 at 2:38 PM, Cynthia Lee Page
<Cynthia.Page at colorado.edu> wrote:
> Michael,
>
> Thanks for all your help.
>
> I have things working pretty nicely now and will post back to my thread
> incase
> any one else needs a solution or has something to add but before I do I want
> to
> understand how to print all plots to one pdf.
>
> So far this is not working for me. If I make a new pdf("all.pdf")
> after the for loop, and then repeat the plot command, followed by a
> dev.off(),
> ie
> for () {
> #  all the individual pdfs here
> }
> pdf("allpdf")
> plot()
> devoff.()
>
> I only get one page on the all.pdf with the plot of the last data object, so
> again it is writing over the last pdf
>
> Cynthia
>
>
> On Nov 10, 2011, at 11:48 AM, R. Michael Weylandt wrote:
>
>> It's usually encouraged to reply to the list as well for
>> threading/archive reasons. (And because occasionally your first
>> respondent will say something wrong and require correction -- I was
>> called out just this morning...oops)
>>
>> Yes, you seem to be using it right to add a title to the plot but you
>> have a few syntactical errors (one of which I think came from my first
>> reply): I think you would prefer this:
>>
>> paste(data$fpkma, data$pdkmb, main =
>> paste(substr(files[i],1,nchar(files[i])-4), ".pdf", collapse = ""),
>> xlab = "FPKM First", ylab = "FPKM Second")
>>
>> The placement of pdf() is irrelevant to how you get the names: whether
>> you put it outside or inside the loop, you can still either name it
>> directly by adding an argument to pdf() or use the default behavior:
>> the placement only affects whether you want one pdf with all your
>> plots or multiple pdfs of one plot each. The only other thing is that
>> you should call pdf() before plot() to make sure the pdf is ready to
>> take the plot.
>>
>> Michael
>>
>> On Thu, Nov 10, 2011 at 11:20 AM, Cynthia Lee Page
>> <Cynthia.Page at colorado.edu> wrote:
>>>
>>> HI Michael,
>>>
>>> You are exactly right about the object data. In my tweaking I messed up
>>> all
>>> my .csv and they were no longer .csv's
>>> So there was  no data object.
>>>
>>> I will try what you suggested regarding generating the pdf files and
>>> naming
>>> them. I think I can use the same technique to
>>> add a title to each plot I am not sure if I can use paste(
>>> substr(files[i],1, nchar(files[i]-4)), ".pdf" below in the plot title as:
>>>
>>> plot(data$fpkma, data$fpkmb, main=paste( substr(files[i],1,
>>> nchar(files[i]-4)), ".pdf", xlab = "FPKM First", ylab="FPKM Second")
>>>
>>> but I will try it.
>>>
>>>  If I put the pdf() outside the loop the plots may go directly to
>>> Rplot.pdf.
>>> I think I have to call pdf() before calling plot() inorder to customize
>>> the
>>> name.
>>>
>>> Now I am ramblin!
>>>
>>> One other thing. I have been responding via reply to sender directly to
>>> those who have responded to me  - I have not posted  to the list.
>>>
>>> Should I be?
>>>
>>> Thanks so much,
>>>
>>> Cynthia
>>>
>>>
>>>
>>> On Nov 9, 2011, at 6:28 PM, R. Michael Weylandt wrote:
>>>
>>>> It sounds like something is going wrong in your data read -- the
>>>> warnings indicate that R probably isn't data to the plotting commands.
>>>> My totally off the wall guess is that if your data is coming by way of
>>>> excel, the commas are leading to your data becoming characters and
>>>> hence not plotting nicely, but that's just a guess. add browser()
>>>> inside your loop between the read commands and the plot just to see
>>>> what your data actually looks like inside R and try to track down the
>>>> error.
>>>>
>>>> As to your pdf() question -- you can also just put it outside the loop
>>>> and close dev.off() after the loop. Then all your plots will be in one
>>>> pdf. Though, perhaps this is what you were looking for as far as name
>>>> manipulation:
>>>>
>>>> pdf(file = paste( substr(files[i],1, nchar(files[i]-4)), ".pdf", sep =
>>>> "")
>>>>
>>>> Michael
>>>>
>>>> On Wed, Nov 9, 2011 at 5:32 PM, David Winsemius <dwinsemius at comcast.net>
>>>> wrote:
>>>>>
>>>>> On Nov 9, 2011, at 4:22 PM, Cynthia Lee Page wrote:
>>>>>
>>>>>> Hi R people!
>>>>>>
>>>>>> I have a directory of .csv files I would like to make into objects
>>>>>> then
>>>>>> scatter plots. I have been having varying degrees of progress. I was
>>>>>> able
>>>>>> make an object of all files, loop through it, and make a pdf of the
>>>>>> last
>>>>>> file I looped through. I kept renaming the pdf so instead of ending up
>>>>>> with
>>>>>> 27 pdfs I got one, with the data from the last file
>>>>>>
>>>>>> I have been tweaking with it and now can't even make the data object
>>>>>> and
>>>>>> I
>>>>>> am not sure why.
>>>>>>
>>>>>> I am a bit brain dead at this point :)
>>>>>>
>>>>>> I am new to R and have been programming in perl - but not all that
>>>>>> long
>>>>>>
>>>>>> Could you please have  al look at it..
>>>>>>
>>>>>> here is the script I have been using
>>>>>>
>>>>>> # source of this code below
>>>>>> #http://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_scrpt.html
>>>>>>
>>>>>> # store the current directory
>>>>>> initial.dir<-getwd()
>>>>>> # change to the new directory
>>>>>>
>>>>>>
>>>>>> setwd("/data/homes/ccpage/ngs/Argueso/Tophat/flocculated/cuffdiff/fpkmgt")
>>>>>>
>>>>>> # source of this code below
>>>>>> # https://stat.ethz.ch/pipermail/r-help/2008-March/158336.html
>>>>>>
>>>>>>
>>>>>> files <- Sys.glob("*.csv")  # get names of files to process
>>>>>> #result <- numeric(length(files))  # preallocate assuming single value
>>>>>> from each file
>>>>>>
>>>>>> for (i in seq_along(files)){
>>>>>> # want to give each object a unique name would like to use file[i]
>>>>>> MINUS
>>>>>> the .csv extention regex
>>>>>> #test<-files[i] # tried to use as variable to name each pdf this
>>>>>> object
>>>>>> is
>>>>>> the name of last file in loop
>>>>>>
>>>>>>  data <- read.csv(files[i])
>>>>>>
>>>>>> # I want to name the pdf the same name as the object with a .pdf
>>>>>> extention
>>>>>> here I think it will be file[i].csv.pdf
>>>>>> # I don't know how to use regex in R I could
>>>>>> readLines(objectnames.txt)
>>>>>> and loop through those as well
>>>>>>
>>>>>>  pdf("data.pdf")
>>>>>
>>>>> At this point you might have been better off if you had just typed:
>>>>>
>>>>>   pdf()
>>>>>
>>>>> The default name for a pdf document is set by this code from the help
>>>>> page
>>>>> for pdf()
>>>>> pdf(file = ifelse(onefile, "Rplots.pdf", "Rplot%03d.pdf"),
>>>>> Notice that "%03d". That means the system pots in a number tthat is one
>>>>> grater than the largest current Rplot_N.pdf in the directory.
>>>>>
>>>>>>  plot(data$fpkma,data$fpkmb, main="Scatter plot of data",xlab="FPKM of
>>>>>> First Time Point",ylab="FPKM of Second Time Point")
>>>>>>  dev.off()
>>>>>> }
>>>>>>
>>>>>> # change back to the original directory
>>>>>> setwd(initial.dir)
>>>>>> ############################################################
>>>>>>
>>>>>> the command I have been using :
>>>>>> R CMD BATCH /data/homes/ccpage/ngs/rscripts/test_for.R
>>>>>>
>>>>>> The Rout
>>>>>>
>>>>>>> # source of this code below
>>>>>>> #http://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_scrpt.html
>>>>>>>
>>>>>>> # store the current directory
>>>>>>> initial.dir<-getwd()
>>>>>>> # change to the new directory
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> setwd("/data/homes/ccpage/ngs/Argueso/Tophat/flocculated/cuffdiff/fpkmgt")
>>>>>>>
>>>>>>> # source of this code below
>>>>>>> # https://stat.ethz.ch/pipermail/r-help/2008-March/158336.html
>>>>>
>>>>>>
>>>>>>>
>>>>>>> files <- Sys.glob("*.csv")  # get names of files to process
>>>>>>> #result <- numeric(length(files))  # preallocate assuming single
>>>>>>> value
>>>>>>> from each file
>>>>>>>
>>>>>>> for (i in seq_along(files)){
>>>>>>
>>>>>> + # want to give each object a unique name would like to use file[i]
>>>>>> MINUS
>>>>>> the .csv extention regex
>>>>>> + #test<-files[i] # tried to use as variable to name each pdf this
>>>>>> object
>>>>>> is the name of last file
>>>>>> +
>>>>>> +    data <- read.csv(files[i])
>>>>>> +
>>>>>> + # I want to name the pdf the same name as the object with a .pdf
>>>>>> extention here I think it will be file[i].csv.pdf
>>>>>> + # I don't know how to use regex in R I could
>>>>>> readLines(objectnames.txt)
>>>>>> and loop through those as well
>>>>>> +
>>>>>> +     pdf("data.pdf")
>>>>>> +     plot(data$fpkma,data$fpkmb,main="Scatter plot of
>>>>>> data",xlab="FPKM
>>>>>> of
>>>>>> First Time Point",ylab="FPKM of Second Time Point")
>>>>>> +     dev.off()
>>>>>> + }
>>>>>> Error in plot.window(...) : need finite 'xlim' values
>>>>>
>>>>> Without the data that created that error, we are not going to be able
>>>>> to
>>>>> give a clear answer.
>>>>>
>>>>>> Calls: plot -> plot.default -> localWindow -> plot.window
>>>>>> In addition: Warning messages:
>>>>>> 1: In min(x) : no non-missing arguments to min; returning Inf
>>>>>> 2: In max(x) : no non-missing arguments to max; returning -Inf
>>>>>> 3: In min(x) : no non-missing arguments to min; returning Inf
>>>>>> 4: In max(x) : no non-missing arguments to max; returning -Inf
>>>>>> Execution halted
>>>>>>
>>>>>> Thanks for any help!\
>>>>>
>>>>> David Winsemius, MD
>>>>> West Hartford, CT
>>>>>
>>>>> ______________________________________________
>>>>> 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.
>>>>>
>>>
>>>
>
>



More information about the R-help mailing list