Subhamitra Patra
2018-Dec-15 05:15 UTC
[R] [R studio] Plotting of line chart for each columns at 1 page
Hello Sir, I am extremely Sorry for the late reply. Ok now, I am sending my data and output, and would like to discuss my queries one by one. This is my final code. pdf("EMs.pdf",width=20,height=20) par(mfrow=c(5,4)) # import your first sheet here (16 columns) ncolumns<-ncol(EMs1.1) for(i in 1:ncolumns) plot(EMs1.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs1.1)[i]) #import your second sheet here, (1 column) ncolumns<-ncol(EMs2.1) for(i in 1:ncolumns) plot(EMs2.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs2.1)[i]) # import your Third sheet here, (1 column) ncolumns<-ncol(EMs3.1) for(i in 1:ncolumns) plot(EMs3.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs3.1)[i]) # import your fourth sheet here, (1 column) ncolumns<-ncol(EMs4.1) for(i in 1:ncolumns) plot(EMs4.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs4.1)[i]) # finish plotting dev.off() With this code, I found the following results. I attached The data files (in rar file containing 4 excel files) and the output of my result. *My First query is :* I am having daily data, and without defining the date column, I obtained the results. Therefore, I found the no. of observation in my X-axis of the plots (in the attached result Pdf file). Now, I need the date column in my X-axis with the corresponding data. I considered 03-01-1994 to 03-08-2017 (Date-Month-Year) by excluding 2 non-trading days per week. I know that the frequency for defining yearly data is 1. So, I tried with the following code being attached to the plot code, but not sure that whether It is giving the appropriate plot or not? *library(zoo)* *y=zoo(EMs1, seq(from = as.Date("1994-01-01"), to = as.Date("2017-08-03"), by = 1))* *Therefore, kindly suggest me instead of getting the no. of observations in the X-axis, how to get the date column in X-axis? * [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&> 12/15/18, 10:39:06 AM On Fri, Dec 14, 2018 at 2:48 PM Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Subhamitra, > As before, I don't have your data, so I cannot run your code. Similarly, > when you say the plot is looking unclear, I have almost no idea what that > means in terms of a plot that I could see and possibly correct. Let's start > at the top anyway. You set up an array of 20 plots, then plot 38 series. > This is going to cycle through your array almost twice, as each time you > plot, you step forward one plot in the array. At the end of the first Excel > data sheet, you will be at plot 18 out of the 20. You then display another > 10 plots, leaving you at plot 8 in the array. Each time you plot into the > same section of the array, you will wipe out the previous plot. Maybe this > is why you are not getting what you want. Finally, you display a further > two plots, leaving you at plot 10. If I am correct, you will have plots 31 > to 38 from sheet 1 in the bottom two rows, with plots 1 and 2 from sheet > two in positions 19 and 20, then 3 to 10 from sheet 2 in the top rows, > finishing off with the two plots from sheet 3 in the 9th and 10th positions > in the second row of the plot array. Of course I can't see what you > actually have plotted, so this is but a desperate guess. I apologize for > the complicated answer which is probably no use whatever, but without data > and hopefully the output of your code, I am unable to read your mind. > > Jim > > > On Fri, Dec 14, 2018 at 4:26 PM Subhamitra Patra < > subhamitra.patra at gmail.com> wrote: > >> Sorry not previous queries, the 3 queries which I mentioned in my last >> email. >> >> On Fri, Dec 14, 2018 at 10:52 AM Subhamitra Patra < >> subhamitra.patra at gmail.com> wrote: >> >>> Dear Sir, >>> >>> The method you suggested for arranging multiple plots in 1 pdf page has >>> finally worked. >>> >>> Thank you very much. >>> >>> But, I have 3 more queries as follows. >>> >>> 1. Is there any way that I can merge the respective plots from the >>> different excel files into 1? For instance, I have 3 excel files (i.e. EMs >>> 1, EMs 2 and EMs 3) having 4 plots each. I want to merge 1st plots from 3 >>> excel files into 1, 2nd plots from 3 excel files into 1, similarly 3rd and >>> 4th plots from each respective files into 1? >>> 2. Is there any way to range the scale of Y-axis for all plots because I >>> think if the range of the Y-axis for each plot is same, it can be easy to >>> interpret and compare the results. I used Ylim function. But, after using >>> the Ylim function, the plot is looking unclear than before. For your >>> convenience, I am providing my code. >>> >>> pdf("EMs.pdf",width=20,height=20) >>> par(mfrow=c(5,4)) >>> # import your first sheet here (38 columns) >>> ncolumns<-ncol(EMs1) >>> for(i in 1:ncolumns) >>> plot(EMs1[,i],type="l",col = "Red", xlab="Time", >>> ylab="APEn", ylim=c(0.1,2), main=names(EMs1)[i]) >>> library(zoo) >>> *APEn=zoo(EMs1, seq(from = as.Date("1994-01-01"), to >>> as.Date("2017-08-03"), by = 1))* >>> #import your second sheet here, (10 columns) >>> ncolumns<-ncol(EMs2) >>> for(i in 1:ncolumns) >>> plot(EMs2[,i],type="l",col = "Red", xlab="Time", >>> ylab="APEn",ylim=c(0.1,2), main=names(EMs2)[i]) >>> *APEn=zoo(EMs2, seq(from = as.Date("1994-01-01"), to >>> as.Date("2017-08-03"), by = 1))* >>> # import your Third sheet here, (2 columns) >>> ncolumns<-ncol(EMs3) >>> for(i in 1:ncolumns) >>> plot(EMs3[,i],type="l",col = "Red", xlab="Time", >>> ylab="APEn", ylim=c(0.1,2), main=names(EMs3)[i]) >>> *APEn=zoo(EMs3, seq(from = as.Date("1996-01-01"), to >>> as.Date("2017-08-03"), by = 1)) * >>> # finish plotting >>> dev.off() >>> >>> 3. I want the corresponding date column (which is the daily date) on >>> X-axis of each plot. Thus, I added 1 line after the plot in the above (i.e. >>> the bold line). Please suggest me Is it the correct way that I am doing? >>> >>> >>> Sir, I am new in R and doing by learning. >>> >>> Kindly suggest me regarding my previous queries for which I shall be >>> always grateful to you. >>> >>> Thank you very much for educating a new R learner. >>> >>> >>> >>> >>> On Wed, Nov 21, 2018 at 3:20 PM Subhamitra Patra < >>> subhamitra.patra at gmail.com> wrote: >>> >>>> Thank you very much for your suggestions and 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, >>>> 3:19:55 PM >>>> >>>> On Wed, Nov 21, 2018 at 3:09 PM Subhamitra Patra < >>>> subhamitra.patra at gmail.com> wrote: >>>> >>>>> OK, Sir. I will try as per your suggestions. >>>>> >>>>> 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, >>>>> 3:07:47 PM >>>>> >>>>> On Wed, Nov 21, 2018 at 2:41 PM Jim Lemon <drjimlemon at gmail.com> >>>>> wrote: >>>>> >>>>>> 1. xaxt="n" means "Don't display the X axis". See the help for "par" >>>>>> in the graphics package >>>>>> >>>>>> 2. axis(1,at=1:nrows,labels=names(MPG3)) >>>>>> This means, "Display the bottom axis (1) with ticks at 1 to the >>>>>> number of rows in the data frame" >>>>>> "Use the values of MPG$Year as labels for the ticks". see the help >>>>>> for "axis" in the graphics package >>>>>> Note that this should be in the same loop as "plot" >>>>>> >>>>>> Now I can see that my guess at the structure of the data was wrong. >>>>>> What you could do is to collapse the daily records into the means for the >>>>>> years. As I don't know what your spreadsheet looks like, I could only guess >>>>>> a method for this. >>>>>> >>>>>> You seem to be saying that you plot all 5655 values, but you want the >>>>>> axis to show just the years.Rather than tell you to convert your data to a >>>>>> time series, I'll suggest a quick hack. >>>>>> >>>>>> axis(1,at=seq(1,5655,by=365),labels=1994:2014) >>>>>> >>>>>> This _may_ work for you. I offer it because I can see that you do not >>>>>> have a lot of experience in R and you want to get the job done. If you >>>>>> can't get it to work, I apologize and you can blamelessly move to something >>>>>> else. >>>>>> >>>>>> Jim >>>>>> >>>>>> PS - If you don't know how to start HTML help - help.start() >>>>>> >>>>>> On Wed, Nov 21, 2018 at 7:26 PM Subhamitra Patra < >>>>>> subhamitra.patra at gmail.com> wrote: >>>>>> >>>>>>> Sir, in the bold portion of the below code, I have some confusion >>>>>>> which I am mentioning below that >>>>>>> >>>>>>> "ylab="MPG",main=names(MPG3)[i],*xaxt="n"*) >>>>>>> axis(*1*,at=1:nrows,*labels=MPG3$Year*)" >>>>>>> >>>>>>> 1. Here, what *xaxt="n"* indicates? I think it indicates the no. of >>>>>>> rows, right? >>>>>>> 2. 1 in the 2nd line represents the no. of graphs. Let suppose, 38 >>>>>>> plots are having the same row, I need to mention them as *axis(38, >>>>>>> at=1:nrows)*, right? >>>>>>> 3. *labels=**MPG3$Year *will give the name of all years in the >>>>>>> X-axis, right? >>>>>>> >>>>>>> Kindly correct me if I am wrong. >>>>>>> >>>>>>> Sir, here one thing I would like to ask, my data frequency is not >>>>>>> yearly. I obtained results from the daily data of the period from >>>>>>> 1994-2017 (that means the no. of rows will be 5655). But, as the daily >>>>>>> period is very unclear to mention in the X-axis, I wanted to give year name >>>>>>> as the name of the X-axis (that means, 1995, 1997, 1999 with the increment >>>>>>> of 2 years up to 2017). >>>>>>> >>>>>>> Sir, please suggest me how to proceed with this? >>>>>>> >>>>>>> >>>>> >>>>> -- >>>>> *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* >> >-- *Best Regards,* *Subhamitra Patra* *Phd. Research Scholar* *Department of Humanities and Social Sciences* *Indian Institute of Technology, Kharagpur* *INDIA* -------------- next part -------------- A non-text attachment was scrubbed... Name: EMs.pdf Type: application/pdf Size: 542618 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20181215/56c6cb99/attachment-0001.pdf>
Jim Lemon
2018-Dec-16 02:40 UTC
[R] [R studio] Plotting of line chart for each columns at 1 page
Hi Subhamitra, Thanks. Now I can provide some assistance instead of just complaining. Your first problem is the temporal extent of the data. There are 8613 days and 6512 weekdays between the two dates you list, but only 5655 observations in your data. Therefore it is unlikely that you have a complete data series, or perhaps you have the wrong dates. For the moment I'll assume that there are missing observations. What I am going to do is to match the 24 years (1994-2017) to their approximate positions in the time series. This will give you the x-axis labels that you want, close enough for this illustration. I doubt that you will need anything more accurate. You have a span of 24.58 years, which means that if your missing observations are uniformly distributed, you will have almost exactly 226 observations per year. When i tried this, I got too many intervals, so I increased the increment to 229 and that worked. To get the positions for the middle of each year in the indices of the data: year_mids<-seq(182,5655,by=229) Now I suppress the x-axis by adding xaxt="n" to each call to plot. Then I add a command to display the years at the positions I have calculated: axis(1,at=year_mids,labels=1994:2017) Also note that I have added braces to the "for" loop. Putting it all together: year_mids<-seq(182,5655,by=229) pdf("EMs.pdf",width=20,height=20) par(mfrow=c(5,4)) # import your first sheet here (16 columns) EMs1.1<-read.csv("EMs1.1.csv") ncolumns<-ncol(EMs1.1) for(i in 1:ncolumns) { plot(EMs1.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs1.1)[i],xaxt="n") axis(1,at=year_mids,labels=1994:2017) } #import your second sheet here, (1 column) EMs2.1<-read.csv("EMs2.1.csv") ncolumns<-ncol(EMs2.1) for(i in 1:ncolumns) { plot(EMs2.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs2.1)[i],xaxt="n") axis(1,at=year_mids,labels=1994:2017) } # import your Third sheet here, (1 column) EMs3.1<-read.csv("EMs3.1.csv") ncolumns<-ncol(EMs3.1) for(i in 1:ncolumns) { plot(EMs3.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs3.1)[i],xaxt="n") axis(1,at=year_mids,labels=1994:2017) } # import your fourth sheet here, (1 column) EMs4.1<-read.csv("EMs4.1.csv") ncolumns<-ncol(EMs4.1) for(i in 1:ncolumns) { plot(EMs4.1[,i],type="l",col = "Red", xlab="Time", ylab="APEn", main=names(EMs4.1)[i],xaxt="n") axis(1,at=year_mids,labels=1994:2017) } # finish plotting dev.off() With any luck, you are now okay. Remember, this is a hack to deal with data that are not what you think they are. Jim [[alternative HTML version deleted]]
Subhamitra Patra
2018-Dec-16 06:54 UTC
[R] [R studio] Plotting of line chart for each columns at 1 page
Thank you very much sir. Actually, I excluded all the non-trading days. Therefore, Each year will have 226 observations and total 6154 observations for each column. The data which I plotted is not rough data. I obtained the rolling observations of window 500 from my original data. So, the no. of observations for each resulted column is (6154-500)+1=5655. So, It is not accurate as per the days of calculations of each year. Ok, Sir, I will go through your suggestion, obtain the results for each column of my data and would like to discuss the results with you. After solving of this problem, I would like to discuss another 2 queries. Thank you very much Sir for educating a new R learner. [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&> 12/16/18, 12:20:17 PM On Sun, Dec 16, 2018 at 8:10 AM Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Subhamitra, > Thanks. Now I can provide some assistance instead of just complaining. > Your first problem is the temporal extent of the data. There are 8613 days > and 6512 weekdays between the two dates you list, but only 5655 > observations in your data. Therefore it is unlikely that you have a > complete data series, or perhaps you have the wrong dates. For the moment > I'll assume that there are missing observations. What I am going to do is > to match the 24 years (1994-2017) to their approximate positions in the > time series. This will give you the x-axis labels that you want, close > enough for this illustration. I doubt that you will need anything more > accurate. You have a span of 24.58 years, which means that if your missing > observations are uniformly distributed, you will have almost exactly 226 > observations per year. When i tried this, I got too many intervals, so I > increased the increment to 229 and that worked. To get the positions for > the middle of each year in the indices of the data: > > year_mids<-seq(182,5655,by=229) > > Now I suppress the x-axis by adding xaxt="n" to each call to plot. Then I > add a command to display the years at the positions I have calculated: > > axis(1,at=year_mids,labels=1994:2017) > > Also note that I have added braces to the "for" loop. Putting it all > together: > > year_mids<-seq(182,5655,by=229) > pdf("EMs.pdf",width=20,height=20) > par(mfrow=c(5,4)) > # import your first sheet here (16 columns) > EMs1.1<-read.csv("EMs1.1.csv") > ncolumns<-ncol(EMs1.1) > for(i in 1:ncolumns) { > plot(EMs1.1[,i],type="l",col = "Red", xlab="Time", > ylab="APEn", main=names(EMs1.1)[i],xaxt="n") > axis(1,at=year_mids,labels=1994:2017) > } > #import your second sheet here, (1 column) > EMs2.1<-read.csv("EMs2.1.csv") > ncolumns<-ncol(EMs2.1) > for(i in 1:ncolumns) { > plot(EMs2.1[,i],type="l",col = "Red", xlab="Time", > ylab="APEn", main=names(EMs2.1)[i],xaxt="n") > axis(1,at=year_mids,labels=1994:2017) > } > # import your Third sheet here, (1 column) > EMs3.1<-read.csv("EMs3.1.csv") > ncolumns<-ncol(EMs3.1) > for(i in 1:ncolumns) { > plot(EMs3.1[,i],type="l",col = "Red", xlab="Time", > ylab="APEn", main=names(EMs3.1)[i],xaxt="n") > axis(1,at=year_mids,labels=1994:2017) > } > # import your fourth sheet here, (1 column) > EMs4.1<-read.csv("EMs4.1.csv") > ncolumns<-ncol(EMs4.1) > for(i in 1:ncolumns) { > plot(EMs4.1[,i],type="l",col = "Red", xlab="Time", > ylab="APEn", main=names(EMs4.1)[i],xaxt="n") > axis(1,at=year_mids,labels=1994:2017) > } > # finish plotting > dev.off() > > With any luck, you are now okay. Remember, this is a hack to deal with > data that are not what you think they are. > > Jim > >-- *Best Regards,* *Subhamitra Patra* *Phd. Research Scholar* *Department of Humanities and Social Sciences* *Indian Institute of Technology, Kharagpur* *INDIA* [[alternative HTML version deleted]]