SlideShare a Scribd company logo
JQuery Flot
 by Arshavski Alexander
Charting libraries



A lot of choices -
http://my.opera.com/tagawa/blog/list-of-javascript-ch
JQuery Flot
Good list of
       features


http://socialcompare.com/en/comparison/javascript-g
Should work
  offline
Date-time axis
...
Flot works on:
Firefox 2.x+

Safari 3.0+

Opera 9.5+

Konqueror 4.x+

Internet Explorer 6+ (the excanvas
Javascript emulation helper is used for
IE < 9)
A lot of plugins
  and examples
Plugins -
http://code.google.com/p/flot/wiki/Plugins

Bubble charts -
https://github.com/ubermajestix/flot-plugins

Usage examples:
http://code.google.com/p/flot/wiki/FlotUsage
It’s not all pink and
         rosy

  Documentation sucks!
That’s why I’m here
What I want to do?
What I want to do?
What I want to do?
Imports
<link type="text/css" href="...jquery-ui.css">
<link type="text/css" href="...flot_layout.css" >
<link type="text/css" href="...jquery-ui-1.8.16.custom.css">

<script type="text/javascript" src="...jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="...jquery-ui-1.8.10.custom.min.js"></script>
<script type="text/javascript" src="...jquery.flot.min.js"></script>
<script type="text/javascript" src="...jquery.flot.pie.min.js"></script>
<script type="text/javascript" src="...jquery.blockUI.js"></script>
Radio buttons

  <div id="radio">
     <input type="radio" id="connections_radio" name="radio"
checked="checked" /><label for="connections_radio">Connections</label>
     <input type="radio" id="usage_radio" name="radio" /><label
for="usage_radio">Usage</label>
     <input type="radio" id="export_radio" name="radio" /><label
for="export_radio">Export</label>
  </div>
Tabs
<div id="usage" style="display: none">
  <div id="usage_tabs">
      <ul>
          <li><a href="#day_statistics">Day</a></li>
          <li><a href="#week_statistics">Week</a></li>
          <li><a href="#month_statistics">Month</a></li>
          <li><a href="#year_statistics">Year</a></li>
      </ul>
      <div id="day_statistics">
          <div id="graphs_container1" class="graph_container”>
             <div id="graph1"></div>
             <div id="graph1_legend" class="graph_legend"></div>
          </div>
      </div>
      ...
      </div>
  ...
</div>
Radio buttons
$(function () {
   $("#connections_radio").click(function(event) {
      $("#connections").show();
      $("#usage").hide();
       $("#export").hide();
   });
   $("#usage_radio").click(function(event) {
      $("#connections").hide();
       $("#usage").show();
       $("#export").hide();
   });
   $("#export_radio").click(function(event) {
       $("#connections").hide();
       $("#usage").hide();
       $("#export").show();
   });
});
Tabs


$(function () {
   ...
   $("#connections_tabs").tabs();
   $("#usage_tabs").tabs();
   $("#usage_distribution_tabs").tabs();
});
Till now...
As a
  python
 guy it’s a
  lot of
 code for
    me
 already,
  so it’s
gonna be a
   mess
Refactoring
<script type="text/javascript" src="...statistics.js"></script>

$(function () {
   ...
   get_connections_statistics();
   get_usage_statistics();
   get_api_distribution_statistics();
   get_distribution_statistics();
   ...
});

{% include "statistics/connections.html" %}
{% include "statistics/usage.html" %}
{% include "statistics/export.html" %}
And now to the main
           part...
  var weekdayNames = "Sunday Monday Tuesday Wednesday Thursday Friday
Saturday".split(" ");
  var shortMonthNames = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
Dec".split(" ");

  $.get('/manage/get_statistics_usage_data', {}, function(data){
    var stat_data = jQuery.parseJSON(data);

    //variables init
    var now = new Date().getTime() + stat_data.time_offset;
    var weekday = new Date(now).getDay();
    var month = new Date(now).getMonth();
    ...
And now to the main
         part...
//building weekly data
var api_calls_points = stat_data.api_calls_weekly;
var bandwidth_points = stat_data.bandwidth_weekly;
for(var i=0; i<api_calls_points.length; i++) {
    graph2_ticks.push([7-i, weekdayNames[(weekday+7-i)%7]]);
    api_calls_weekly.push([i, api_calls_points[i]]);
    bandwidth_weekly.push([i, bandwidth_points[i]]);
}
...
//building yearly data
var api_calls_points = stat_data.api_calls_yearly;
var bandwidth_points = stat_data.bandwidth_yearly;
for(var i=0; i<api_calls_points.length; i++) {
    graph4_ticks.push([12-i, shortMonthNames[(month+12-i)%12]]);
    api_calls_yearly.push([i, api_calls_points[i]]);
    bandwidth_yearly.push([i, bandwidth_points[i]]);
}
And now to the main
         part...
var options2 = {
   legend: {
      position: "ne",
      container: $("#graph2_legend")
   }, xaxis: {
      ticks: graph2_ticks
   }, yaxis: {
      min: 0,
      tickDecimals: 0 //only whole numbers
   }, grid: { hoverable: true }
};

    xaxis: { //in case of time axis
       mode: "time",
       timeformat: "%H:%M"
    },
And now to the main
         part...
var usage_plot2 = $.plot($("#graph2"), [
   {
      data: api_calls_weekly,
      label: "API calls",
      lines: { show: true }
   },
   {
      label: "Bandwidth (KB)",
      data: bandwidth_weekly,
      lines: { show: true }
   },
], options2);
Till now...
What if I want to
select a graph?
Graph Select
$('.legendColorBox').parent().click(function() {
  var plot = usage_plot1;
  var data = [api_calls_daily, bandwidth_daily];
  var graph = $(this).parent().parent().parent().attr("id").split("_")[0];
  if (graph == "graph2") {
      plot = usage_plot2;
      data = [api_calls_weekly, bandwidth_weekly];
  }
  ...
  if ($(this).children().text() == "API calls”) {
      plot.setData(get_plot_data([data[0], null, "lines", [], null, "lines"]));
  }
  if ($(this).children().text() == "Bandwidth (KB)") {
      plot.setData(get_plot_data([[], null, "lines", data[1], null, "lines"]));
  }
  plot.draw();
  ...
Graph Select
     var ticks = [graph2_ticks, graph3_ticks, graph4_ticks];
     if ($(this).siblings().text().search("Show all") == -1) {
        $('<tr/>', {
           style: 'cursor: auto;'
        }).bind('click', {plot: plot, data: data, ticks: ticks, now: now},
           show_all_usage_graphs)
        .append("<td class='legendColorBox'></td><td>Show all</td>").appendTo($
(this).parent());
        }
     });

function show_all_usage_graphs(e) {
    e.data.plot.setData(get_plot_data([e.data.data[0], null, "lines",
       e.data.data[1], null, "lines"]));
    e.data.plot.draw();
    $(this).remove();
  }
Till now...
What about
        tooltips?


I could take them from a lot of places. For
example: http://jquerytools.org/
I decided to do it
      myself
Tooltips
function add_usage_tooltips(now, ticks) {
  for (var i=1; i<=4; i++) {
     ...
     $("#graph" + i).bind("plothover", function (event, pos, item) {
         draw_tooltip(item, tick, now);
     });
  }
}

function draw_tooltip(item, ticks, now) {
  ...
  var tooltip = get_tooltip_message(item, ticks, now);
  showChartTooltip(tooltip, item);
  ...
}
Tooltips
function showChartTooltip(contents, item) {
  ...
  $("<div id='charttooltip'>" + contents + "</div>").css(
      {
         position: 'absolute',
         display: 'none',
         top: item.pageY + 5,
         left: item.pageX + 5,
         border: '1px solid #bfbfbf',
         padding: '2px',
         'background-color': item.series.color,
         opacity: 1
      }).appendTo("body").fadeIn(200);
  ...
}
Till now...
How can I make
                  bars?

$.plot($("#graph2"), [
   {
       data: api_calls_weekly,
       label: "Clients API hourly",
       bars: { show: true } //instead of: lines: { show: true }
   },
   ...
], options2);
By the way tooltips
   on bars looks
      good...
For charts you
              should add:


<script type="text/javascript" src="...jquery.flot.pie.min.js"></script>
Charts
   var options = {
      series: {
        pie: {
           show: true,
           radius: 1,
           label: {
               show: true,
               radius: 3/4,
               formatter: function(label, series){
                 return '<div style="font-size:12pt;text-
align:center;padding:2px;color:black;">'+label+'<br/>'+Math.round(series.percent)+'%</
div>';              },                     background: { opacity: 0.5 }
           }
         }
      }
   };
   $.plot($("#countries_piechart"), data, options);
One last thing...



JQuery BlockUI Plugin:
http://jquery.malsup.com/block/
BlockUI
<script type="text/javascript" src="...jquery.blockUI.js"></script>

$(function () {
  ...
  var message = '<img src=".../loader.gif" /> Please wait...';
  $("#usage_tabs").block({ message: message });
  ...
  get_usage_statistics();
  ...
}

function get_usage_statistics() {
  $.get('.../get_statistics_usage_data', {}, function(data){
     ...
     $("#usage_tabs").unblock();
  });
}
BlockUI
Questions?


     alexarsh5@gmail.com

     http://twitter.com/alexarsh

     http://www.linkedin.com/pub

More Related Content

PDF
Canvas - The Cure
KEY
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
PDF
mobl
PPT
Google Visualization API
PDF
Rediscovering JavaScript: The Language Behind The Libraries
PDF
Epic South Disasters
PDF
Jquery In Rails
PPT
Backbone js
Canvas - The Cure
Building Single Page Apps with Backbone.js, Coffeescript and Rails 3.1
mobl
Google Visualization API
Rediscovering JavaScript: The Language Behind The Libraries
Epic South Disasters
Jquery In Rails
Backbone js

What's hot (20)

PDF
Using a mobile phone as a therapist - Superweek 2018
PDF
PhoneGap: Local Storage
PDF
Crowdsourcing with Django
PPT
Supstat nyc subway
PDF
画像Hacks
PPT
An Elephant of a Different Colour: Hack
KEY
Advanced jQuery
PDF
HTML5 and CSS3 Refresher
ODP
ELK Stack - Turn boring logfiles into sexy dashboard
ODP
Javascript & jQuery: A pragmatic introduction
PDF
Drupal Mobile
PDF
droidQuery: The Android port of jQuery
PDF
MongoDB Aggregation Framework in action !
PDF
Node.js - Demnächst auf einem Server in Ihrer Nähe
TXT
Daily notes
PPTX
jQuery Data Manipulate API - A source code dissecting journey
TXT
20160227 Granma
DOC
PPT
A Short Introduction To jQuery
PPTX
SVCC 2013 D3.js Presentation (10/05/2013)
Using a mobile phone as a therapist - Superweek 2018
PhoneGap: Local Storage
Crowdsourcing with Django
Supstat nyc subway
画像Hacks
An Elephant of a Different Colour: Hack
Advanced jQuery
HTML5 and CSS3 Refresher
ELK Stack - Turn boring logfiles into sexy dashboard
Javascript & jQuery: A pragmatic introduction
Drupal Mobile
droidQuery: The Android port of jQuery
MongoDB Aggregation Framework in action !
Node.js - Demnächst auf einem Server in Ihrer Nähe
Daily notes
jQuery Data Manipulate API - A source code dissecting journey
20160227 Granma
A Short Introduction To jQuery
SVCC 2013 D3.js Presentation (10/05/2013)
Ad

Similar to JQuery Flot (20)

PPTX
SPTechCon Dev Days - Third Party jQuery Libraries
PDF
HTML5 Graphing and Data Visualization Cookbook 1st Edition Ben Fhala
PDF
Visual Exploration of Large Data sets with D3, crossfilter and dc.js
TXT
charts
PDF
Html5 Graphing And Data Visualization Cookbook 1st Edition Ben Fhala
PPTX
Spsmi13 charts
PDF
Om nom nom nom
PPT
Sencha Touch Charts
PPT
Making Pretty Charts in Splunk
KEY
User Interface Development with jQuery
PPTX
Shield UI JavaScript Chart
PPTX
PhDigital 2020: Web Development
PDF
Move your data (Hans Rosling style) with googleVis + 1 line of R code
PDF
2015 FOSS4G Track: Spatiotemporal Interface Development: Using Web Technologi...
PDF
Visualization of Big Data in Web Apps
PDF
d4 and friendly charting DSL for D3
PDF
The world gets better with JavaScript
PDF
The world gets better with JavaScript
PDF
Learn D3.js in 90 minutes
PPT
jQuery Loves You
SPTechCon Dev Days - Third Party jQuery Libraries
HTML5 Graphing and Data Visualization Cookbook 1st Edition Ben Fhala
Visual Exploration of Large Data sets with D3, crossfilter and dc.js
charts
Html5 Graphing And Data Visualization Cookbook 1st Edition Ben Fhala
Spsmi13 charts
Om nom nom nom
Sencha Touch Charts
Making Pretty Charts in Splunk
User Interface Development with jQuery
Shield UI JavaScript Chart
PhDigital 2020: Web Development
Move your data (Hans Rosling style) with googleVis + 1 line of R code
2015 FOSS4G Track: Spatiotemporal Interface Development: Using Web Technologi...
Visualization of Big Data in Web Apps
d4 and friendly charting DSL for D3
The world gets better with JavaScript
The world gets better with JavaScript
Learn D3.js in 90 minutes
jQuery Loves You
Ad

Recently uploaded (20)

PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPT
Teaching material agriculture food technology
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
Approach and Philosophy of On baking technology
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Modernizing your data center with Dell and AMD
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Mobile App Security Testing_ A Comprehensive Guide.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Machine learning based COVID-19 study performance prediction
Teaching material agriculture food technology
GamePlan Trading System Review: Professional Trader's Honest Take
Approach and Philosophy of On baking technology
The Rise and Fall of 3GPP – Time for a Sabbatical?
NewMind AI Monthly Chronicles - July 2025
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Understanding_Digital_Forensics_Presentation.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Modernizing your data center with Dell and AMD
Chapter 3 Spatial Domain Image Processing.pdf
Big Data Technologies - Introduction.pptx
NewMind AI Weekly Chronicles - August'25 Week I
“AI and Expert System Decision Support & Business Intelligence Systems”
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx

JQuery Flot

  • 1. JQuery Flot by Arshavski Alexander
  • 2. Charting libraries A lot of choices - http://my.opera.com/tagawa/blog/list-of-javascript-ch
  • 4. Good list of features http://socialcompare.com/en/comparison/javascript-g
  • 5. Should work offline
  • 7. ...
  • 8. Flot works on: Firefox 2.x+ Safari 3.0+ Opera 9.5+ Konqueror 4.x+ Internet Explorer 6+ (the excanvas Javascript emulation helper is used for IE < 9)
  • 9. A lot of plugins and examples Plugins - http://code.google.com/p/flot/wiki/Plugins Bubble charts - https://github.com/ubermajestix/flot-plugins Usage examples: http://code.google.com/p/flot/wiki/FlotUsage
  • 10. It’s not all pink and rosy Documentation sucks!
  • 12. What I want to do?
  • 13. What I want to do?
  • 14. What I want to do?
  • 15. Imports <link type="text/css" href="...jquery-ui.css"> <link type="text/css" href="...flot_layout.css" > <link type="text/css" href="...jquery-ui-1.8.16.custom.css"> <script type="text/javascript" src="...jquery-1.5.1.min.js"></script> <script type="text/javascript" src="...jquery-ui-1.8.10.custom.min.js"></script> <script type="text/javascript" src="...jquery.flot.min.js"></script> <script type="text/javascript" src="...jquery.flot.pie.min.js"></script> <script type="text/javascript" src="...jquery.blockUI.js"></script>
  • 16. Radio buttons <div id="radio"> <input type="radio" id="connections_radio" name="radio" checked="checked" /><label for="connections_radio">Connections</label> <input type="radio" id="usage_radio" name="radio" /><label for="usage_radio">Usage</label> <input type="radio" id="export_radio" name="radio" /><label for="export_radio">Export</label> </div>
  • 17. Tabs <div id="usage" style="display: none"> <div id="usage_tabs"> <ul> <li><a href="#day_statistics">Day</a></li> <li><a href="#week_statistics">Week</a></li> <li><a href="#month_statistics">Month</a></li> <li><a href="#year_statistics">Year</a></li> </ul> <div id="day_statistics"> <div id="graphs_container1" class="graph_container”> <div id="graph1"></div> <div id="graph1_legend" class="graph_legend"></div> </div> </div> ... </div> ... </div>
  • 18. Radio buttons $(function () { $("#connections_radio").click(function(event) { $("#connections").show(); $("#usage").hide(); $("#export").hide(); }); $("#usage_radio").click(function(event) { $("#connections").hide(); $("#usage").show(); $("#export").hide(); }); $("#export_radio").click(function(event) { $("#connections").hide(); $("#usage").hide(); $("#export").show(); }); });
  • 19. Tabs $(function () { ... $("#connections_tabs").tabs(); $("#usage_tabs").tabs(); $("#usage_distribution_tabs").tabs(); });
  • 21. As a python guy it’s a lot of code for me already, so it’s gonna be a mess
  • 22. Refactoring <script type="text/javascript" src="...statistics.js"></script> $(function () { ... get_connections_statistics(); get_usage_statistics(); get_api_distribution_statistics(); get_distribution_statistics(); ... }); {% include "statistics/connections.html" %} {% include "statistics/usage.html" %} {% include "statistics/export.html" %}
  • 23. And now to the main part... var weekdayNames = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "); var shortMonthNames = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "); $.get('/manage/get_statistics_usage_data', {}, function(data){ var stat_data = jQuery.parseJSON(data); //variables init var now = new Date().getTime() + stat_data.time_offset; var weekday = new Date(now).getDay(); var month = new Date(now).getMonth(); ...
  • 24. And now to the main part... //building weekly data var api_calls_points = stat_data.api_calls_weekly; var bandwidth_points = stat_data.bandwidth_weekly; for(var i=0; i<api_calls_points.length; i++) { graph2_ticks.push([7-i, weekdayNames[(weekday+7-i)%7]]); api_calls_weekly.push([i, api_calls_points[i]]); bandwidth_weekly.push([i, bandwidth_points[i]]); } ... //building yearly data var api_calls_points = stat_data.api_calls_yearly; var bandwidth_points = stat_data.bandwidth_yearly; for(var i=0; i<api_calls_points.length; i++) { graph4_ticks.push([12-i, shortMonthNames[(month+12-i)%12]]); api_calls_yearly.push([i, api_calls_points[i]]); bandwidth_yearly.push([i, bandwidth_points[i]]); }
  • 25. And now to the main part... var options2 = { legend: { position: "ne", container: $("#graph2_legend") }, xaxis: { ticks: graph2_ticks }, yaxis: { min: 0, tickDecimals: 0 //only whole numbers }, grid: { hoverable: true } }; xaxis: { //in case of time axis mode: "time", timeformat: "%H:%M" },
  • 26. And now to the main part... var usage_plot2 = $.plot($("#graph2"), [ { data: api_calls_weekly, label: "API calls", lines: { show: true } }, { label: "Bandwidth (KB)", data: bandwidth_weekly, lines: { show: true } }, ], options2);
  • 28. What if I want to select a graph?
  • 29. Graph Select $('.legendColorBox').parent().click(function() { var plot = usage_plot1; var data = [api_calls_daily, bandwidth_daily]; var graph = $(this).parent().parent().parent().attr("id").split("_")[0]; if (graph == "graph2") { plot = usage_plot2; data = [api_calls_weekly, bandwidth_weekly]; } ... if ($(this).children().text() == "API calls”) { plot.setData(get_plot_data([data[0], null, "lines", [], null, "lines"])); } if ($(this).children().text() == "Bandwidth (KB)") { plot.setData(get_plot_data([[], null, "lines", data[1], null, "lines"])); } plot.draw(); ...
  • 30. Graph Select var ticks = [graph2_ticks, graph3_ticks, graph4_ticks]; if ($(this).siblings().text().search("Show all") == -1) { $('<tr/>', { style: 'cursor: auto;' }).bind('click', {plot: plot, data: data, ticks: ticks, now: now}, show_all_usage_graphs) .append("<td class='legendColorBox'></td><td>Show all</td>").appendTo($ (this).parent()); } }); function show_all_usage_graphs(e) { e.data.plot.setData(get_plot_data([e.data.data[0], null, "lines", e.data.data[1], null, "lines"])); e.data.plot.draw(); $(this).remove(); }
  • 32. What about tooltips? I could take them from a lot of places. For example: http://jquerytools.org/
  • 33. I decided to do it myself
  • 34. Tooltips function add_usage_tooltips(now, ticks) { for (var i=1; i<=4; i++) { ... $("#graph" + i).bind("plothover", function (event, pos, item) { draw_tooltip(item, tick, now); }); } } function draw_tooltip(item, ticks, now) { ... var tooltip = get_tooltip_message(item, ticks, now); showChartTooltip(tooltip, item); ... }
  • 35. Tooltips function showChartTooltip(contents, item) { ... $("<div id='charttooltip'>" + contents + "</div>").css( { position: 'absolute', display: 'none', top: item.pageY + 5, left: item.pageX + 5, border: '1px solid #bfbfbf', padding: '2px', 'background-color': item.series.color, opacity: 1 }).appendTo("body").fadeIn(200); ... }
  • 37. How can I make bars? $.plot($("#graph2"), [ { data: api_calls_weekly, label: "Clients API hourly", bars: { show: true } //instead of: lines: { show: true } }, ... ], options2);
  • 38. By the way tooltips on bars looks good...
  • 39. For charts you should add: <script type="text/javascript" src="...jquery.flot.pie.min.js"></script>
  • 40. Charts var options = { series: { pie: { show: true, radius: 1, label: { show: true, radius: 3/4, formatter: function(label, series){ return '<div style="font-size:12pt;text- align:center;padding:2px;color:black;">'+label+'<br/>'+Math.round(series.percent)+'%</ div>'; }, background: { opacity: 0.5 } } } } }; $.plot($("#countries_piechart"), data, options);
  • 41. One last thing... JQuery BlockUI Plugin: http://jquery.malsup.com/block/
  • 42. BlockUI <script type="text/javascript" src="...jquery.blockUI.js"></script> $(function () { ... var message = '<img src=".../loader.gif" /> Please wait...'; $("#usage_tabs").block({ message: message }); ... get_usage_statistics(); ... } function get_usage_statistics() { $.get('.../get_statistics_usage_data', {}, function(data){ ... $("#usage_tabs").unblock(); }); }
  • 44. Questions? alexarsh5@gmail.com http://twitter.com/alexarsh http://www.linkedin.com/pub