Skip to content

need help with a time series plotting problem

10 messages · David Winsemius, jim holtman, Rui Barradas +1 more

#
Dear R Users,
                     I am a beginner in R programming and need some help
with a simple plotting problem that i am having. My dataset consist of three
columns: first one has data_id, second is the date and third is the actual
data itself corresponding to each date. The date ranges from
1/1/2000-12/31/2009. I am trying to plot my data versus the dates as a long
term time series but what's happening is that R is plotting each year on top
of the previous year. so instead of getting 1 line (dated 2000-2009) in the
plot i am getting 9 lines (1 line for each year). i tried to look for
solutions online but found nothing. can someone suggest how can i make a
plot with x-axis ranging from 2000-2009. my code is copied below:

setwd("J:/Rstuff/flow")
flow=read.delim("flow.dat",header=TRUE,sep="\t")
plot(flow$usgs1500~as.Date(flow$date,
"%m/%d/%y"),type="l",xlab="date",ylab="daily discharge (m3/s)
",main="USGS1500",yaxs="i", xaxs="i",)


any help would be appreciated

regards

vibhava  

--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4230672.html
Sent from the R help mailing list archive at Nabble.com.
#
you need to supply a subset of your data since the problem is probably related to its representation.  please follow the posting guidelines.

Sent from my iPad
On Dec 24, 2011, at 2:21, vibhava <vibhavasrivastava at gmail.com> wrote:

            
#
thanks for the reply. here is subset of the data that i want to plot:
	date	usgs700	
1	10/1/2000	0.050970325			
2	10/2/2000	0.041059428			
3	10/3/2000	0.032564374			
4	10/4/2000	0.02775051
.
.
.
.
.

4014	9/27/2011	0	
4015	9/28/2011	0	
4016	9/29/2011	0	
4017	9/30/2011	0	

my script again is:

setwd("J:/Rstuff/flow")
flow=read.delim("flow.dat",header=TRUE,sep="\t")
plot(flow$usgs1500~as.Date(flow$date,
"%m/%d/%y"),type="l",xlab="date",ylab="daily discharge (m3/s)
",main="USGS1500",yaxs="i", xaxs="i",)


i wish to plot all this data as a single time series but my program is doing
some weird stuff and the x-axis has labels Jan-dec and the long term series
is broken and plotted on yearly basis.

regards

vibhava

--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4231285.html
Sent from the R help mailing list archive at Nabble.com.
#
On Dec 24, 2011, at 9:24 AM, vibhava wrote:

            
Instead of posting print-output why not post the results of  
dput(head(flow))
There's no column with that name.
For another thing, you generally  need to use %Y for 4 digit years.
Not sure if that empty argument is going to be handled gracefully.
Your code is not reproducible.
#
sorry about the change in variable name (data has column named usgs700 but
code has usgs700). actually i am trying to get familiar with R as i need to
make more complex time series plots in near future (stackplots, scatterplot
etc.). Let me try to explain what i am intending to achieve here. below i
have copied first few lines of a large dataset (daily flow records for 4017
days at 8 usgs locations). first column is date and rest of them are flow
data measured at these 8 different location. now all i wish to do is to read
them in and make time series plots for the entire period of record for each
stations. i have attached some figures that i made in excel and i wish to do
something like this using R. 

I know my code might have some errors and that's the reason why i am
requesting for help from people who know R better than I do. i am R user for
less than a day but i know what i am trying to do is really simple and all i
need is to read 9 columns and make a simple time series plot.

i would appreciate if anyone can correct the code that i have written below
or if they have some alternate way of doing this i would be happy to learn
something new

regards

vibhava

Date	USGS700	USGS1000	USGS1500	USGS 1898	USGS1975	USGS2500	USGS2700	USGS2800
10/1/2000	0.05	0.57	2.32	2.27	4.11	29.45	29.45	29.45
10/2/2000	0.04	0.54	2.12	1.70	4.05	29.17	29.17	29.17
10/3/2000	0.03	0.48	1.93	1.98	3.96	28.88	28.88	28.88
10/4/2000	0.03	0.45	1.76	1.42	3.91	28.60	28.60	28.60
10/5/2000	0.03	0.42	1.64	1.27	3.82	28.32	28.32	28.32
10/6/2000	0.03	0.42	1.53	1.13	3.74	28.26	28.26	28.26
10/7/2000	0.11	0.51	1.59	5.66	3.68	28.23	28.23	28.23
10/8/2000	0.16	0.45	1.70	3.40	3.62	27.84	27.84	27.84
10/9/2000	0.10	0.42	1.78	2.55	3.54	26.56	26.56	26.56
#plot of 1 variable USGS1500

http://r.789695.n4.nabble.com/file/n4231737/flow.docx flow.docx 

--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4231737.html
Sent from the R help mailing list archive at Nabble.com.
#
This should plot all the columns for you:

flow <- read.table(text = "Date    USGS700 USGS1000        USGS1500
    USGS1898       USGS1975        USGS2500        USGS2700
USGS2800
10/1/2000       0.05    0.57    2.32    2.27    4.11    29.45   29.45   29.45
10/2/2000       0.04    0.54    2.12    1.70    4.05    29.17   29.17   29.17
10/3/2000       0.03    0.48    1.93    1.98    3.96    28.88   28.88   28.88
10/4/2000       0.03    0.45    1.76    1.42    3.91    28.60   28.60   28.60
10/5/2000       0.03    0.42    1.64    1.27    3.82    28.32   28.32   28.32
10/6/2000       0.03    0.42    1.53    1.13    3.74    28.26   28.26   28.26
10/7/2000       0.11    0.51    1.59    5.66    3.68    28.23   28.23   28.23
10/8/2000       0.16    0.45    1.70    3.40    3.62    27.84   27.84   27.84
10/9/2000       0.10    0.42    1.78    2.55    3.54    26.56   26.56   26.56"
    , as.is = TRUE
    , header = TRUE
    )

# setup margins
par(mar = c(5, 5, 3, 3))

# plot each column of data
for (i in names(flow)[-1]){  # ignore the "Date" column
    plot(as.Date(flow$Date, "%m/%d/%y")
        , flow[[i]]  # column to plot
        ,type="l"
        ,xlab="date"
        ,ylab=expression("daily discharge (" * m^3/s * ")")
        ,main=i
        ,yaxs="i"
        , xaxs="i"
        )
}
On Sat, Dec 24, 2011 at 1:20 PM, vibhava <vibhavasrivastava at gmail.com> wrote:

  
    
#
thanks for your reply. i don't think your solution is what i am looking for.
Please look at the attached two plots; first plot is what i have made using
excel and the second plot is what i was getting when i was running my script
through R yesterday night. I think my script was reading and implementing
things nicely but the only problem was that at the end of each year my time
series line use to start from the same axis label (instead of keep creating
more labels and extending the x-axis.
                      therefore what happened was that unlike the excel plot
which has x-axis from oct00-oct2011, i have x-axis labels jan-nov.  i am
looking for something similar to excel where you select the axis and right
click on it and you can extend the x-axis. 
                     so to sum up i *just need* to know how to extend my
x-axis (see attached figures) so that i get a continuous line (i need one
line for each plot representing 11 years of record AND DO NOT want 11 lines
representing the same thing).

regards

vibhava
http://r.789695.n4.nabble.com/file/n4232160/flow.docx flow.docx 

--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4232160.html
Sent from the R help mailing list archive at Nabble.com.
#
Try this; this should put the labels on the x-axis like Excel does:

flow <- read.table(text = "Date    USGS700 USGS1000        USGS1500
USGS1898       USGS1975        USGS2500        USGS2700 USGS2800
10/1/2001       0.05    0.57    2.32    2.27    4.11    29.45   29.45   29.45
10/1/2002       0.04    0.54    2.12    1.70    4.05    29.17   29.17   29.17
10/1/2003       0.03    0.48    1.93    1.98    3.96    28.88   28.88   28.88
10/1/2004       0.03    0.45    1.76    1.42    3.91    28.60   28.60   28.60
10/1/2005       0.03    0.42    1.64    1.27    3.82    28.32   28.32   28.32
10/1/2006       0.03    0.42    1.53    1.13    3.74    28.26   28.26   28.26
10/1/2007       0.11    0.51    1.59    5.66    3.68    28.23   28.23   28.23
10/1/2008       0.16    0.45    1.70    3.40    3.62    27.84   27.84   27.84
10/1/2009       0.10    0.42    1.78    2.55    3.54    26.56   26.56   26.56"

   , as.is = TRUE
   , header = TRUE
   )

# setup margins
par(mar = c(5, 5, 3, 3))

# create x-axis with yearly tick marks starting in Oct
x_range <- seq(from = as.Date("2001-10-1")
            , to = as.Date("2011-10-1")
            , by = '1 year'
            )
# now create the format of month-year
x_label <- sprintf("%s-%02d", format(x_range, "%b"),
as.POSIXlt(x_range)$year %% 100)

# plot each column of data
for (i in names(flow)[-1]){  # ignore the "Date" column
   plot(as.Date(flow$Date, "%m/%d/%Y")
       , flow[[i]]  # column to plot
       ,type="l"
       ,xlab="date"
       ,ylab=expression("daily discharge (" * m^3/s * ")")
       ,main=i
       ,yaxs="i"
       , xaxs="i"
       , xaxt = 'n'
       , xlim = range(x_range)
       )

   axis(1, at = x_range, labels = x_label, las = 2)
}
On Sat, Dec 24, 2011 at 3:23 PM, jim holtman <jholtman at gmail.com> wrote:

  
    
#
vibhava wrote
Hello,

If I'm understanding it well, this is a time series problem, use time series
functions.

You can use 'stats::ts' or, what seems to be better for your problem,
package zoo.
Here is an example.

library(zoo)

flow <- read.delim( ... etc ...


flow$Date <- as.Date(flow$Date, format="%m/%d/%Y")
head(flow$Date)  # see if it worked

zflow <- zoo(flow[,-1], order.by=flow$Date)  # make the time series

plot(zflow)                      # all 8 series, ugly axes
plot(zflow$USGS700)  # just the first series, ugly axes

If this helps, then make it pretty with Jim's ideas.
See also the 'plot.zoo' help page, it has several examples with fancy
labels.

Rui Barradas


--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4233688.html
Sent from the R help mailing list archive at Nabble.com.
4 days later
#
Dear Jim and Rui,
                             Thanks for your suggestions. i just
successfully prepared my first graph :). now i will move on to more
interesting figures. thank you once again for your help and time.

regards

vibhava


--
View this message in context: http://r.789695.n4.nabble.com/need-help-with-a-time-series-plotting-problem-tp4230672p4245022.html
Sent from the R help mailing list archive at Nabble.com.