[R] [R studio] Plotting of line chart for each columns at 1 page

Jim Lemon drjimlemon @ending from gm@il@com
Wed Nov 21 08:51:07 CET 2018


Now we're getting somewhere. I suspect that each Excel sheet looks
something like this:

Year    Tonga    Samoa    Fiji
2008    21.2      32.0       18.7
...
2017    23.7      31.9       19.3
# in the above there are three columns (countries) and ten rows
# import this sheet as "MPG3"
nrows<-nrow(MPG3) # nrows equals 10
ncols<-ncol(MPG3)  # ncols equals 3
for(i in 1:ncols)
 plot(seq(1:nrows,MPG3[,i],type="l",xlab="Distance",
  ylab="MPG",main=names(MPG3)[i],xaxt="n")
 axis(1,at=1:nrows,labels=MPG3$Year)

I probably have the structure of the imported data frame wrong, but I think
you can work that out.

Jim



On Wed, Nov 21, 2018 at 4:08 PM Subhamitra Patra <subhamitra.patra using gmail.com>
wrote:

> As per your suggestion, *"you will need to adjust the number of "x"
> values to match the number of "y" values.  Now with the addition of the
> nrow function, the code for each sheet will be*
>
>
> *ncolumns<-ncol(mpg)*
> *   nrows<-nrow(mpg) *
>
>
> *for(i in
> 1:ncolumns) plot(seq(1,500,length.out=10),mpg[,i],type="l",xlab="Distance",
> ylab="MPG",main=names(mpg)[i])  *
>
> #####The no. of rows for the columns in one sheet will be the same. In the
> X-axis, I need to mention Year which is the same for all columns in a
> sheet. But, the starting year varies from one sheet to other.
>
> *Sir, please suggest in case of any mistakes.*
>
> Second, I will definitely consider your suggestions about the division of
> sample by similar characteristics so that it can be easier to show in
> graphical. Thank you very much, sir, for such creative and wonderful
> suggestions.
>
>
>
> [image: Mailtrack]
> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Sender
> notified by
> Mailtrack
> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 11/21/18,
> 10:35:03 AM
>
> On Wed, Nov 21, 2018 at 9:40 AM Jim Lemon <drjimlemon using gmail.com> wrote:
>
>> For your first question, yes, you will need to adjust the number of "x"
>> values to match the number of "y" values. You can use the "nrow" function
>> to get that number. I don't really know what the abscissa scale is on your
>> plots, I just made up the data I used.
>>
>> If you are comparing countries, you may want to divide the results into
>> countries of different characteristics, perhaps GDP or similar. Otherwise
>> you will end up with a quite large PDF page. This is okay if you are
>> viewing it electronically, but will present a challenge in hard copy.
>>
>> Jim
>>
>> On Wed, Nov 21, 2018 at 2:51 PM Subhamitra Patra <
>> subhamitra.patra using gmail.com> wrote:
>>
>>> Hello Sir,
>>>
>>> Thank you very much. I will try it out and will let you the result.
>>>
>>> The no. of rows varies per sheet by a different number of observations.
>>> Due to different no. of rows or observations, I separated the columns in
>>> different sheets.
>>>
>>> *Will a different number of rows create a problem for appending all
>>> plots?*
>>>
>>> Concerning your last suggestion "*This seems like a lot of plots, and I
>>> suspect that you could work out a better way to display all this
>>> information.*",  I am doing a multi-country study and obtained results
>>> for each country. I would summarize the final result at the end. But, for
>>> displaying the information for each country, I thought the plot is the best
>>> way to give a supplementary result on each country. Sir, in this context, I
>>> would like to take your suggestion that Is the way what I am doing, right
>>> to proceed? If any alternative way is available, please suggest me.
>>>
>>> Thank you very much, Sir, for your kind help and suggestions.
>>>
>>> [image: Mailtrack]
>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Sender
>>> notified by
>>> Mailtrack
>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 11/21/18,
>>> 9:12:14 AM
>>>
>>> On Wed, Nov 21, 2018 at 8:18 AM Jim Lemon <drjimlemon using gmail.com> wrote:
>>>
>>>> I assume that you are importing the Excel sheets separately. When you
>>>> import a sheet, you can get the number of columns with this:
>>>>
>>>> ncol(<name of data frame>)
>>>>
>>>> Using the data frame "mpg" that I created:
>>>>
>>>> ncolumns<-ncol(mpg)
>>>> ncolumns
>>>> [1] 38
>>>>
>>>> You can then substitute "ncolumns" each time you import another sheet.
>>>> How you want to deal with the varying numbers of columns you will get is
>>>> another matter. One way is to work out the total number of plots you want
>>>> and put them all onto one PDF page. Say you have 50 plots overall. You
>>>> could start a very big PDF page:
>>>>
>>>> pdf("allplots.pdf",width=30,height=15)
>>>> par(mfrow=c(5,10))
>>>> # import your first sheet here (38 columns)
>>>> ncolumns<-ncol(mpg)
>>>> for(i in 1:ncolumns)
>>>>  plot(seq(1,500,length.out=10),mpg[,i],type="l",xlab="Distance",
>>>>   ylab="MPG",main=names(mpg)[i])# import your second sheet here, say
>>>> 10 columns
>>>> # import your second sheet here, (10 columns)
>>>> ncolumns<-ncol(mpg1)
>>>> for(i in 1:ncolumns)
>>>>  plot(seq(1,500,length.out=10),mpg1[,i],type="l",xlab="Distance",
>>>>   ylab="MPG",main=names(mpg)[i])# import your third sheet here, say 2
>>>> columns
>>>> # import your second sheet here, (2 columns)
>>>> ncolumns<-ncol(mpg2)
>>>> for(i in 1:ncolumns)
>>>>  plot(seq(1,500,length.out=10),mpg2[,i],type="l",xlab="Distance",
>>>>   ylab="MPG",main=names(mpg)[i])
>>>> # finish plotting
>>>> dev.off()
>>>>
>>>> You would then have 50 plots on the PDF page. I am assuming that all of
>>>> your sheets have the same number of rows and a few other things. This seems
>>>> like a lot of plots, and I suspect that you could work out a better way to
>>>> display all this information.
>>>>
>>>> Jim
>>>>
>>>>
>>>> On Wed, Nov 21, 2018 at 1:20 PM Subhamitra Patra <
>>>> subhamitra.patra using gmail.com> wrote:
>>>>
>>>>> Hello Sir,
>>>>>
>>>>> Thanks, now I understood and will check them out.
>>>>>
>>>>> One more thing I want to ask that I have 1 excel file with multiple
>>>>> (i.e. 12 sheets). Each sheet contains different number of columns, for
>>>>> instance, 1st sheet contains 38 columns, 2nd sheet contains 10 columns,
>>>>> Third 2 columns, 4th 1 column and so on. Actually, due to some missing
>>>>> observations in these columns, I couldn't add them in 1 sheet.
>>>>>
>>>>> As you suggested the below code in the last mail,
>>>>>
>>>>> par(mfrow=c(4,10))
>>>>> for(i in 1:38)
>>>>>  plot(seq(1,500,length.out=10),mpg[,i],type="l",xlab="Distance",
>>>>>   ylab="MPG",main=names(mpg)[i])
>>>>> dev.off()
>>>>>
>>>>> Do I need to run the code separately for each sheet?
>>>>>
>>>>> Actually, in par (mfrow=c(4,10)), the plot for 38 columns will be
>>>>> added, the space for extra 2 will remain as empty. So, I thought to add
>>>>> plots for the columns from the next sheet in those emptied space.
>>>>>
>>>>> Is there any way that I can add plots from the next sheets of the same
>>>>> excel file in the emptied space? In other words, Is there any way to append
>>>>> plots from all sheets?
>>>>>
>>>>> Kindly help a new R learner Sir for which I shall be always grateful
>>>>> to you.
>>>>>
>>>>> Thank you very much for your kind help.
>>>>>
>>>>>
>>>>>
>>>>> [image: Mailtrack]
>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Sender
>>>>> notified by
>>>>> Mailtrack
>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 11/21/18,
>>>>> 7:30:30 AM
>>>>>
>>>>> On Wed, Nov 21, 2018 at 7:17 AM Jim Lemon <drjimlemon using gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Subhamitra,
>>>>>>
>>>>>> 1. Here I manufacture some data so that the example is
>>>>>> "reproducible", that is anyone can run the code and get the same output
>>>>>> that I do. Yes, veh1...veh38 are the names of the variables.
>>>>>>
>>>>>> 2. Here I join the 38 variables I created into a data frame, which I
>>>>>> think is the input for your plotting routine. This names of the columns of
>>>>>> the data frame become the names of the variables.
>>>>>>
>>>>>> When you say that you want the column names as the "header" (title)
>>>>>> of each plot, I think if you change the plotting loop to this:
>>>>>>
>>>>>> pdf("mpg.pdf",width=30,height=12)
>>>>>> par(mfrow=c(4,10))
>>>>>> for(i in 1:38)
>>>>>>  plot(seq(1,500,length.out=10),mpg[,i],type="l",xlab="Distance",
>>>>>>   ylab="MPG",main=names(mpg)[i])
>>>>>> dev.off()
>>>>>>
>>>>>> you will get what you requested. Remember that I have done this in
>>>>>> base graphics, not ggplot.
>>>>>>
>>>>>> Jim
>>>>>>
>>>>>> On Wed, Nov 21, 2018 at 12:37 PM Subhamitra Patra <
>>>>>> subhamitra.patra using gmail.com> wrote:
>>>>>>
>>>>>>> Hello Sir,
>>>>>>>
>>>>>>> Thanks, I'll check them out.
>>>>>>>
>>>>>>> But, I am not understanding 2 points of your suggestion.
>>>>>>>
>>>>>>> 1. In the line,* "*for(i in 1:38) assign(paste0("veh",i),rep(sam
>>>>>>> ple(10:35,1),10)+runif(10,-4,*4))", *what veh, rep(sam
>>>>>>> ple(10:35,1),10)+runif(10,-4,4)) indicate? Here veh indicates
>>>>>>> columns right?
>>>>>>> *2. In the
>>>>>>> line, mpg<-data.frame(veh1,veh2,veh3,veh4,veh5,veh6,veh7,veh8,veh9,veh10,*
>>>>>>> * veh11,veh12,veh13,veh14,**veh15,veh16,veh17,veh18,veh19,**veh20,*
>>>>>>> * veh21,veh22,veh23,veh24,**veh25,veh26,veh27,veh28,veh29,**veh30,*
>>>>>>> * veh31,veh32,veh33,veh34,**veh35,veh36,veh37,veh38)  ** , *veh[i]
>>>>>>> indicates column sequence, right? I need to give column names as the header
>>>>>>> of their respective graphs. Please suggest me How to add this?
>>>>>>>
>>>>>>>
>>>>>>> I am very new to R and therefore asking you these queries which
>>>>>>> might be simple for you.
>>>>>>>
>>>>>>> I expect positive help from you.
>>>>>>>
>>>>>>> Thanks for your kind help.
>>>>>>> [image: Mailtrack]
>>>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> Sender
>>>>>>> notified by
>>>>>>> Mailtrack
>>>>>>> <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&> 11/21/18,
>>>>>>> 7:02:18 AM
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Nov 21, 2018 at 4:38 AM Jim Lemon <drjimlemon using gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Subhamitra,
>>>>>>>> As Bert noted, you are mixing base and grid graphics. Here is a
>>>>>>>> simple
>>>>>>>> way to get a plot like what you described. It will probably take
>>>>>>>> more
>>>>>>>> work to find what you actually do want and discover how to get it.
>>>>>>>>
>>>>>>>> for(i in 1:38)
>>>>>>>> assign(paste0("veh",i),rep(sample(10:35,1),10)+runif(10,-4,4))
>>>>>>>> mpg<-data.frame(veh1,veh2,veh3,veh4,veh5,veh6,veh7,veh8,veh9,veh10,
>>>>>>>>  veh11,veh12,veh13,veh14,veh15,veh16,veh17,veh18,veh19,veh20,
>>>>>>>>  veh21,veh22,veh23,veh24,veh25,veh26,veh27,veh28,veh29,veh30,
>>>>>>>>  veh31,veh32,veh33,veh34,veh35,veh36,veh37,veh38)
>>>>>>>> pdf("mpg.pdf",width=30,height=12)
>>>>>>>> par(mfrow=c(4,10))
>>>>>>>> for(i in 1:38)
>>>>>>>>  plot(seq(1,500,length.out=10),mpg[,i],type="l",xlab="Distance",
>>>>>>>>   ylab=names(mpg)[i],main="MPG by distance")
>>>>>>>> dev.off()
>>>>>>>>
>>>>>>>> Jim
>>>>>>>>
>>>>>>>> On Wed, Nov 21, 2018 at 5:19 AM Subhamitra Patra
>>>>>>>> <subhamitra.patra using gmail.com> wrote:
>>>>>>>> >
>>>>>>>> > Dear R users,
>>>>>>>> >
>>>>>>>> > I have one excel file with 5 sheets. The no. of columns vary for
>>>>>>>> each
>>>>>>>> > sheet. The 1st sheet consists of 38 columns. So, I want to plot
>>>>>>>> 38 separate
>>>>>>>> > line charts and arrange them in par(mfrow = c(4, 10)) order.
>>>>>>>> Please suggest
>>>>>>>> > me how to do this. I have tried with the following code by
>>>>>>>> running a loop
>>>>>>>> > inside of a sheet, but it is not working. Further, I want to run
>>>>>>>> loops for
>>>>>>>> > each sheet.
>>>>>>>> >
>>>>>>>> > par(mfrow = c(4, 10))
>>>>>>>> > loop.vector <- 1:38
>>>>>>>> > for (i in loop.vector)
>>>>>>>> > x <- JJ[,i]
>>>>>>>> > library(ggplot2)
>>>>>>>> >   library(cowplot)
>>>>>>>> >   plot.mpg <- ggplot(mpg, aes(x,
>>>>>>>> >                               main = paste ("country", i),
>>>>>>>> >                               xlab = "Scores",
>>>>>>>> >                               xlim = c(1,500)
>>>>>>>> >                               y = colnames[i,], colour =
>>>>>>>> factor(cyl))) +
>>>>>>>> >   geom_line(size=2.5)
>>>>>>>> > save_plot("mpg.png", plot.mpg,
>>>>>>>> >           base_aspect_ratio = 1.3)
>>>>>>>> >
>>>>>>>> > I want to give my X axis name as scores of (1,500) and Y axis as
>>>>>>>> the
>>>>>>>> > particular column names for all graphs.
>>>>>>>> >
>>>>>>>> > Please suggest.
>>>>>>>> >
>>>>>>>> > Thanks in advance.
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> > *Best Regards,*
>>>>>>>> > *Subhamitra Patra*
>>>>>>>> > *Phd. Research Scholar*
>>>>>>>> > *Department of Humanities and Social Sciences*
>>>>>>>> > *Indian Institute of Technology, Kharagpur*
>>>>>>>> > *INDIA*
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > [image: Mailtrack]
>>>>>>>> > <
>>>>>>>> https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&
>>>>>>>> >
>>>>>>>> > Sender
>>>>>>>> > notified by
>>>>>>>> > Mailtrack
>>>>>>>> > <
>>>>>>>> https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&
>>>>>>>> >
>>>>>>>> > 11/20/18,
>>>>>>>> > 11:49:42 PM
>>>>>>>> >
>>>>>>>> >         [[alternative HTML version deleted]]
>>>>>>>> >
>>>>>>>> > ______________________________________________
>>>>>>>> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>>>>> > 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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Best Regards,*
>>>>>>> *Subhamitra Patra*
>>>>>>> *Phd. Research Scholar*
>>>>>>> *Department of Humanities and Social Sciences*
>>>>>>> *Indian Institute of Technology, Kharagpur*
>>>>>>> *INDIA*
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> *Best Regards,*
>>>>> *Subhamitra Patra*
>>>>> *Phd. Research Scholar*
>>>>> *Department of Humanities and Social Sciences*
>>>>> *Indian Institute of Technology, Kharagpur*
>>>>> *INDIA*
>>>>>
>>>>
>>>
>>> --
>>> *Best Regards,*
>>> *Subhamitra Patra*
>>> *Phd. Research Scholar*
>>> *Department of Humanities and Social Sciences*
>>> *Indian Institute of Technology, Kharagpur*
>>> *INDIA*
>>>
>>
>
> --
> *Best Regards,*
> *Subhamitra Patra*
> *Phd. Research Scholar*
> *Department of Humanities and Social Sciences*
> *Indian Institute of Technology, Kharagpur*
> *INDIA*
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list