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]]