Re: Re: Help with DateListPlot
- To: mathgroup at smc.vnet.net
- Subject: [mg82243] Re: [mg82221] Re: Help with DateListPlot
- From: Darren Glosemeyer <darreng at wolfram.com>
- Date: Tue, 16 Oct 2007 03:24:34 -0400 (EDT)
- References: <fesq3k$p4n$1@smc.vnet.net> <200710150526.BAA00439@smc.vnet.net>
Peter Pein wrote:
> KTugbawa at gmail.com schrieb:
>
>> How do you use the DateList Plot function when you have a 3-vector
>> database. The first column is the date, the second column contains the
>> names, and the last column contains the returns. I know that you have
>> to use a loop.
>>
>
> I know I have not to use a loop ;-)
>
> The data looks like this:
>
>> Date Item return
>> 1/2/01 TBill 0.67
>> 1/3/01 SP 0.78
>> 1/4/01 inv 0.5
>> 1/5/01 inve 0.6
>> ..
>> ..
>> ..
>> ..
>> 1/12/01 Forc 1.2
>> 1/2/02 TBill 0.4
>> 1/3/02 SP 0.2
>> 1/4/02 inv 0.6
>> 1/5/02 inve 0.9
>> ..
>> ..
>> ..
>> ..
>> 1/12/02 Forc 1.6
>>
>> This patterns continues until 1/6/2007
>>
>> I need to use DataListPlot to plot the returns of each item.
>>
>>
>>
>
> Let`s see how the file is read in:
>
> In[1]:=
> tbl = Import["thefile.txt", "Table"];
>
> have a look at the first line
>
> FullForm[tbl[[1]]]
> Out[2]//FullForm=
> {"1/2/01", "TBill", 0.67}
>
> We have to convert the string "mm/dd/yy" to a list {y,m,d}. Additionally
> I add 2000 to the year:
>
> In[3]:=
> data = Apply[{ToExpression[StringJoin["{",
> StringReplace[#1, "/" -> ","],
> "}"]][[{3, 1, 2}]] + {2000, 0, 0}, #3} & , tbl, {1}]
> Out[3]=
> {{{2001, 1, 2}, 0.67}, {{2001, 1, 3}, 0.78}, {{2001, 1, 4}, 0.5},
> {{2001, 1, 5}, 0.6}}
>
> I do not have access to Mathematica 6 but according to
> http://reference.wolfram.com/mathematica/ref/DateListPlot.html ,
>
> DateListPlot[data]
>
> should work.
>
>
> Regards,
> Peter
>
I just wanted to add a couple notes about using DateListPlot with
different date specifications. The dates given to DateListPlot can be
date lists, date strings, or absolute times. A few of the posts seemed
to indicate that the dates needed to be date lists, so I wanted to point
out that the dates can be strings or absolute times as well.
As mentioned by Bill Rowe, the date strings in this particular data set
are ambiguous. The DateFunction option can be used to define how dates
in data should be converted to date lists.
As examples, here are ways to use the DateFunction for the examples posted.
data = {{"1/2/01", "TBill", 0.67}, {"1/3/01", "SP", 0.78}, {"1/4/01",
"inv", 0.5}, {"1/5/01", "inve", 0.6}};
This interprets the dates as m/d/y.
DateListPlot[data[[All, {1, -1}]],
DateFunction -> (DateList[{#, {"Month", "Day", "Year"}}] &)]
This interprets the dates as d/m/y.
DateListPlot[data[[All, {1, -1}]],
DateFunction -> (DateList[{#, {"Day", "Month", "Year"}}] &)]
Here David Annetts' date conversion function is used.
cdate[str_, base_: 2000] :=
Module[{dy, mo, yr}, {dy, mo, yr} =
ToExpression@StringSplit[str, "/"];
{yr + base, mo, dy}]
DateListPlot[data[[All, {1, -1}]], DateFunction -> cdate]
This will use the conversion provided by Peter Pein.
DateListPlot[data[[All, {1, -1}]],
DateFunction -> (ToExpression[
StringJoin["{", StringReplace[#, "/" -> ","], "}"]][[{3, 1,
2}]] + {2000, 0, 0} &)]
Darren Glosemeyer
Wolfram Research
- References:
- Re: Help with DateListPlot
- From: Peter Pein <petsie@dordos.net>
- Re: Help with DateListPlot