Sorry, been away for a week on holidays.  Will see what I can do for you on
Monday.  :-)

On Sat, Mar 7, 2009 at 8:38 AM, Adam Nelson <[email protected]> wrote:

> Scott,
>
> Thanks again.  Not to be a nag but do you think you could send a few lines
> of the plot_data and eventsXMLDoc "files".  I have a pretty good guess about
> what's in there but it would be easiest if I could see that.
>
> Anyway, what I've concluded is that I will prenormalize the data in my view
> rather than try to make JavaScript do the heavy lifting.  I'm using Django
> URL handlers so there will never be a file for the data sources - just
> database queries or ideally caches of previous ones.
>
> Thanks,
> Adam
>
>
> On Thu, Mar 5, 2009 at 5:45 PM, Scott Thomson <
> [email protected]> wrote:
>
>> Hi Adam,
>>
>> Instead of generating a file, you can create plot data and event objects
>> in memory and set them directly on the eventsource as shown at the top of
>> the code I sent you.
>>
>> This might be preferable as it requires no disk write, but it does of
>> course depend on your data size.
>>
>> <snip>
>>     timeplot = Timeplot.create(document.getElementById("TIMEPLOT"),
>> plotInfo);
>>     eventSource.loadPlotData(plot_data);  // JSON data
>>     eventSource2.loadXML(eventsXMLDoc, ''); // XML data
>> </snip>
>>
>> I can't really speak on whether it is better to pre or post normalize but
>> Timeplot certaily won't normalise the data for you.
>>
>> It does however support linear and logarithmic data scales if that helps.
>> Here's my updateTimePlot function in case it helps you... (ignore the
>> height/width theme code, it isn't working)
>>
>> Note that the plot data and events are loaded directly to the eventsource
>> as objects not read as files.  Note the columnSource definitions and the
>> axis geometry definitions.
>>
>> function updateTimePlot(plot_data, xml_events, width, height) {
>>
>>     var theme = Timeline.ClassicTheme.create();
>>     theme.event.bubble.width = width + 300;
>>     theme.event.bubble.height = height + 400;
>>     glob_w = width + 20;
>>     glob_h = height + 20;
>>
>>     var blue   = new Timeplot.Color("#4682B4");
>>     var green = new Timeplot.Color("#228B22");
>>     var red    = new Timeplot.Color("#DC143C");
>>
>>     var gridColor  = new Timeplot.Color('#888888');
>>
>>     var eventSource = new Timeplot.DefaultEventSource();
>>
>>     var timeGeometry = new Timeplot.DefaultTimeGeometry({
>>         gridColor: gridColor,
>>         axisLabelsPlacement: "top",
>>         min: 0
>>     });
>>
>>     logGeometry = new Timeplot.LogarithmicValueGeometry({
>>         gridColor: gridColor,
>>         axisLabelsPlacement: "left",
>>         min: 0
>>     });
>>
>>     var callTime = new Timeplot.ColumnSource(eventSource,1);
>>     var referralTime = new Timeplot.ColumnSource(eventSource,2);
>>     var responseTime = new Timeplot.ColumnSource(eventSource,3);
>>
>>     var eventSource2 = new Timeplot.DefaultEventSource();
>>
>>     var plotInfo = [
>>                 Timeplot.createPlotInfo({
>>                     id: "adCall-time",
>>             timeZone:       11,
>>                     dataSource: callTime,
>>                     timeGeometry: timeGeometry,
>>                     valueGeometry: logGeometry,
>>                     lineColor: blue,
>>             lineWidth: 3.0,
>>             dotRadius: 5.0,
>>             dotColor: blue,
>>                     showValues: true
>>                 }),
>>                 Timeplot.createPlotInfo({
>>                     id: "referral-time",
>>             timeZone:       11,
>>                     dataSource: referralTime,
>>                     valueGeometry: logGeometry,
>>                     lineColor: green,
>>             lineWidth: 3.0,
>>             dotRadius: 5.0,
>>             dotColor: green,
>>                     showValues: true
>>                 }),
>>                 Timeplot.createPlotInfo({
>>                     id: "response-time",
>>             timeZone:       11,
>>                     dataSource: responseTime,
>>                     valueGeometry: logGeometry,
>>                     lineColor: red,
>>             lineWidth: 3.0,
>>             dotRadius: 5.0,
>>             dotColor: red,
>>                     showValues: true
>>                 }),
>>                 Timeplot.createPlotInfo({
>>                     id: "Events",
>>             timeZone:       11,
>>             eventSource: eventSource2,
>>                     timeGeometry: timeGeometry,
>>                     lineColor: red,
>>             theme: theme
>>                 })
>>     ];
>>
>>     timeplot = Timeplot.create(document.getElementById("TIMEPLOT"),
>> plotInfo);
>>     eventSource.loadPlotData(plot_data);
>>     eventSource2.loadXML(xml_events, '');
>>
>>     var key = document.getElementById("TIMEPLOT_KEY");
>>     key.innerHTML = '<span style="color: #4682B4;"><b>Ad Call
>> Time</b></span> / <span style="color: #228B22;"><b>Referral Call
>> Time</b></span> / <span style="color: #DC143C;"><b>Content Delivery
>> Time</b></span>';
>>
>> }
>>
>>
>> On Fri, Mar 6, 2009 at 9:27 AM, Adam Nelson <[email protected]> wrote:
>>
>>> Scott,
>>>
>>> That will help alot.  It leads me to another question.  A little
>>> background:
>>>
>>> I'm trying to create a voting app that shows the probability of a number
>>> of outcomes happening historically.  I can pull that data as
>>> {datetime,score} for each possible outcome and then normalize it in JS with
>>> the other scores at that datetime so the probability of all the outcomes = 1
>>> (or 100% - however you want to say it).  This would require me to generate
>>> the file whenever somebody requests it after somebody voted on that outcome.
>>>
>>> Or, I can pull the data pre-normalized, but then it would be best to pull
>>> the data like {outcome_id,datetime,normalized_score} which doesn't seem to
>>> be something that timeplot can handle AFAIK.  This would be the functional
>>> equivalent as the above situation but it's N-1 fewer queries where N is the
>>> number of outcomes.
>>>
>>> The third option is to simply generate a file for each possible outcome
>>> and update it every time somebody requests the data after somebody else
>>> voted on ANY outcome.
>>>
>>> Have you or anybody else dealt with this kind of situation?
>>>
>>> Thanks very much,
>>> Adam
>>>
>>> On Thu, Mar 5, 2009 at 5:08 PM, Scott Thomson <
>>> [email protected]> wrote:
>>>
>>>> I tooled around with it for a while... the timeplot data seems to
>>>> support JSON, but the timeline integration does not.
>>>>
>>>> <snip>
>>>>     timeplot = Timeplot.create(document.getElementById("TIMEPLOT"),
>>>> plotInfo);
>>>>     eventSource.loadPlotData(plot_data);  // JSON data
>>>>     eventSource2.loadXML(xml_events, ''); // XML data
>>>> </snip>
>>>>
>>>> I used a Java servlet to generate the timeplot JSON data and then used a
>>>> combination of DOJO and an xml.js library to generate the XML data for the
>>>> timeline.
>>>>
>>>> <snip>
>>>>    var xml_events;
>>>>     for (var i = 0; i < lastQuery.adcalls.length; i++)
>>>>     {
>>>>         var adcall = lastQuery.adcalls[i];
>>>>         var referral = lastQuery.adcalls[i].referrals[0];
>>>>         var response = referral.responses[0];
>>>>
>>>>         var row = new Array(4);
>>>>         row[0] = adcall.date; // Add date
>>>>         row[1] = adcall.time; // Add adcall time
>>>>         row[2] = referral.time; // Add referral time
>>>>         row[3] = response.time; // Add response time
>>>>
>>>>         // Add row to timeplot data
>>>>         plot_data[global_plot_data.length] = row;
>>>> :
>>>> //ellided
>>>> :
>>>>         var attr_str = '{start: "' + adcall.tl_date + '", ' +
>>>>                 'title: "Test #' + (global_event_count++) + '", ' +
>>>>                 'link: "' + escape(referral.url) + '"}';
>>>>         var attrs = eval('(' + attr_str + ')');
>>>>
>>>>         var desc = response.type + ' (' + response.length + ' bytes)';
>>>>
>>>>         xml_events += elementNL(
>>>>                 'event',
>>>>                 desc,
>>>>                 attrs
>>>>                 );
>>>>     }
>>>>     // Prepare XML
>>>>     var xml_txt = '<data>\n' + xml_events + '</data>';
>>>>     // alert(xml_txt);
>>>>
>>>>     var parser=new DOMParser();
>>>>     var eventsXMLDoc=parser.parseFromString(xml_txt,"text/xml");
>>>>
>>>>     // update Timplot
>>>>     if (plot_data.length > 1) {
>>>>         updateTimePlot(plot_data, eventsXMLDoc, width, height);
>>>>     }
>>>> </snip>
>>>>
>>>> The updateTimePlot function calls standard timeplot creation calls as
>>>> per the top of this email.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Mar 6, 2009 at 7:18 AM, Adam N <[email protected]> wrote:
>>>>
>>>>>
>>>>> Has anybody extended Timeplot to handle different data sources
>>>>> (specifically JSON)?  I'm new to the project so I'll probably just
>>>>> convert my data to the text format available - but I'd prefer to use
>>>>> JSON since everything I would typically spit out is JSON .
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Scott Thomson
>>>> 0401 726 889
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Adam Nelson
>>>
>>> http://www.varud.com
>>> http://twitter.com/varud
>>> http://www.linkedin.com/in/adamcnelson
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Scott Thomson
>> 0401 726 889
>>
>>
>>
>
>
> --
> Adam Nelson
>
> http://www.varud.com
> http://twitter.com/varud
> http://www.linkedin.com/in/adamcnelson
>
> >
>


-- 
Scott Thomson
0401 726 889

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"SIMILE Widgets" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/simile-widgets?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to