🔔 Alert..!! Get 2 Month Free Cloud Hosting With $200 Bonus From Digital Ocean ACTIVATE DEAL

jqCandlestick is a jQuery and canvas based plugin that makes it easier to create point chart, plot chart, line chart, column chart, bar chart, and candlestick chart.

line-chart Bar-chart column-chart Canvas plot-chart candlestick-chart

Documentation

jqCandlestick

jQuery plugin for creating line, bar and candlestick charts.

Supported browsers

Should work in all browsers that support the canvas element (tested in newest versions of Chrome, Firefox and Internet Explorer).

Support for Internet Explorer 8 and below should be possible using polyfill and an older version of jQuery. See https://code.google.com/p/explorercanvas for polyfill.

Todo

  • Support for non-date x-axis
  • Update data dynamically
  • Fix x-axis

Usage

Include jQuery, jqCandlestick JavaScript and jqCandlestick CSS:

<script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.jqcandlestick.min.js"></script> <link rel="stylesheet" type="text/css" href="css/jqcandlestick.css" /> 

It is important that you include jQuery before jqCandlestick.

Create a container for your chart and use the jqCandlestick() function on it to create the chart:

<div id="my-chart" style="width: 640px; height: 480px;"></div>    <script type="text/javascript">   $(function() {     var data = [/* ... */];     $('#my-chart').jqCandlestick({       data: data,     });   }); </script> 

Where data should be a variable containing a multi-dimensional array of data. The expected format of the data-array depends on the number of data series in the chart. The first element of each row is the x-value (as a UNIX timestamp) (this can be changed in the options).

Many configuration options are available. The default options are defined in $.fn.jqCandlestick.defaults.

Data series

Multiple data series can be defined for a chart:

<script type="text/javascript">   $(function() {     $('#my-chart').jqCandlestick({       data: data,       series: [{         type: 'line',         name: 'Series #1',       }, {         type: 'point',         name: 'Series #2',         dataOffset: 2       }],     });   }); </script> 

Each series inherits its settings from $.fn.jqCandlestick.defaults.seriesDefaults, which is defined as:

seriesDefaults: {   type: 'point',   name: null,   names: [],   dataOffset: 1,   yAxis: 0,   color: '#fff', } 

Four built-in types are available (defined in $.fn.jqCandlestick.types): 'point', 'line', 'column' and 'candlestick'. The name-option defines the name of the series (shown when hovering over the chart) while the names-option, which is only used by type 'candlestick', defines the labels for "open", "high", "low" and "close". The dataOffset-option defines at which offset the values for the series start. The default is 1 which means that a default point-chart will expect a data-array of the format:

[   [1391697000000, 23], // timestamp, value (offsets 0 and 1)   [1391696100000, 14],   [1391695200000, 5],   // etc... ] 

The 'candlestick' type is a bit different, in that it expects 4 values at the offset, e.g. with dataOffset: 1:

[   [1391697000000, 23, 25, 12, 20], // timestamp, open, high, low, close (offsets 0, 1, 2, 3, 4)   [1391696100000, 20, 21, 10, 14],   [1391695200000, 14, 20, 5, 7],   // etc... ] 

The yAxis-option specifies which y-axis to use (if multiple y-axes are defined, as explained in a later section).

The x-axis

The xaxis-option can be used to customize the format of the x-axis:

xAxis: {   name: 'DATE',   months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],   dataOffset: 0,   // ...   labels: {     // ...     format: 'date',   }, } 

The name-option is used to set the name of the axis while the months-option defines a list of months (for translation-purposes). As with data series, the dataOffset-option specifies the location of x-values in the data array. The default format for the x-axis is 'date', which is currently the only supported value.

Y-axes

Several y-axes can be defined in the yAxis-option, e.g.:

yAxis: [{   height: 3, }, {   height: 2,   format: { fixed: 2 }, }] 

The above example will result in two chart-areas within the chart sharing the same x-axis. The height of the first area will be 60% (3/5) of the total height, while the height of the second area will be 40% (2/5) of the total height.

Each y-axis inherits its options from $.fn.jqCandlestick.defaults.yAxisDefaults which contains the following:

yAxisDefaults: {   height: 1,   // ...   labels: {     // ...     format: null, // possible values: a function(x) or an object {fixed: y) where y is number of decimals   }, } 

The height-option defines the height of the axis as the numerator of the fraction height / total_height where the total height is the sum of all height-options. E.g. in the above example the total height is 3 + 2 = 5.

The format of the labels of the y-axis can be defined using the labels.format-option. The default is null which means that the raw numbers will be printed. It is possible to print the number with a specific number of decimals by setting format: { fixed: n }, where n is the number of decimals. It is also possible to define a custom formatting function such as format: function(x) { return Math.round(x); }.

Appearance

There are two built-in themes available: 'light' and 'dark', optimized for white and black backgrounds respectively. The built-in themes are defined in $.fn.jqCandlestick.themes. Colors, fonts and spacings can also be changed manually. The following options are available for customizing the appearance of charts:

{   theme: 'light', // imports default colors from a theme defined in $.fn.jqCandlestick.themes   font: '8pt sans-serif', // default font for all text   padding: { // distances between the boundaries of the chart-container and the chart itself     top: 0,     left: 10,     bottom: 0,     right: 0,   },   plot: {     spacing: 5, // vertical space between chart areas     padding: { // distances between plot area and axes       top: 0,       left: 15,       bottom: 0,       right: 15,     },   },   xAxis: {     color: '#333', // color of x-axis     strokeWidth: 1.0, // width x-axis     tickSize: 5, // length of each tick (can be negative)     labels: {       font: null, // font to use for labels       color: '#999', // color for labels     },   },   yAxisDefaults: {     color: '#222', // default color of y-axes     strokeWidth: 1.0, // default width of y-axes     tickDistance: 40, // minimum distance between ticks     labels: {       font: null, // font for labels       color: '#999', // color for labels     },   },   seriesDefaults: {     color: '#fff', // default color for series   },   info: {     color: '#999', // color for info     font: null, // font     spacing: 20, // distance between values     position: 'left', // 'left', 'right' or 'auto'     wrap: 'auto', // 'auto', 'yes' or 'no'   },   cross: {     color: 'rgba(255, 255, 255, 0.5)', // color of cursor-cross     strokeWidth: 1.0, // width cursor-cross lines     text: {       background: '#000', // background color for text       font: null, // font for text       color: '#999', // color for text     },   },   containerClass: 'jqcandlestick-container', // class for chart container   chartCanvasAttrs: { // additional attributes to add to chart canvas element     class: 'jqcandlestick-canvas',   },   crossCanvasAttrs: { // additional attributes to add to cross canvas element     class: 'jqcandlestick-canvas',   }, } 

Each series type has additional options available:

Point charts

Series with type: 'point' has the following additional options:

{   radius: 3, // Radius of points   stroke: null, // Color of stroke (null for no stroke)   strokeWidth: 2.0, // Width of stroke } 

Line charts

Series with type: 'line' has the following additional options:

{   strokeWidth: 2.0, // Width of line } 

Bar/column charts

Series with type: 'column' has the following additional options:

{   width: 5, // Width of each bar/column   stroke: null, // Color of stroke (null for no stroke)   strokeWidth: 1.0, // Width of stroke } 

Candlestick charts

Series with type: 'candlestick' has the following addtional options:

{   names: ['OPEN', 'HIGH', 'LOW', 'CLOSE'], // Value names   width: 5, // Width of each candlestick   downColor: null, // Color of decreasing candlestick   downStroke: null, // Stroke color of decreasing candlestick   downStrokeWidth: 1.0, // Stroke width of decreasing candlestick   upColor: null, // Color of increasing candlestick   upStroke: null, // Stroke color of increasing candlestick   upStrokeWidth: 1.0, // Stroke width of increasing candlestick } 

Advanced usage

Currently jqCandlestick only has support for 4 different types of series. You can manually add custom types to the $.fn.jqCandlestick.types-object. As an example, the 'point'-type is defined as:

point: {   dataSize: 1, // defines expected number of values in data-array (would be 4 for candlestick)   radius: 3, // additional options (default values)   stroke: null, // ...   strokeWidth: 2.0, // ...   // The draw function is called in order to draw a data series of this type.   // It takes the following parameters:   //   ctx - Canvas context for drawing   //   settings - The entire settings object   //   plot - An object containing some information about the plot area, such as:   //     min, max - minimum and maximum values for plot area   //     minY, maxY - top and bottom of plot area   //   series - series settings   //   data - entire data array   //   getX - a function, getX(value), that returns the x-value in pixels for a given value   //   getY - a function, getY(plot, value), that returns the y-value in pxiels for a given plot area and value   draw: function(ctx, settings, plot, series, data, getX, getY) {     ctx.fillStyle = series.color;     ctx.lineWidth = series.strokeWidth;     // Iterate over each row in the dataset     data.forEach(function(row) {       // Find x- and y-values using the provided functions       var x = getX(row[settings.xAxis.dataOffset]); // x-axis data offset from settings       var y = getY(plot, row[series.dataOffset]); // series data offset from settings       ctx.beginPath();       // Draw circle       ctx.arc(x, y, series.radius, 0, Math.PI * 2, true);       ctx.fill();       // Draw stroke if set       if (series.stroke) {         ctx.strokeStyle = series.stroke;         ctx.lineWidth = series.strokeWidth;         ctx.stroke();       }     });   }, }, 

You May Also Like