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