Overview
AmCharts is programming library for all your data visualization needs. You can download and use it for free. The only limitation of the free version is that a small link to this web site will be displayed in the top left corner of your charts. If you would like to use charts without this link, or you appreciate the software and would like to support its creators,
please purchase a commercial license . For more info please check
AmCharts Home .
Exclusively for Keenthemes users
After purchasing Metronic you will get a promo code for
15% discount off the commercial license of
AmChart . To find the promo code please check the README file in the purchased package.
Usage
To use
AmCharts in your page you will need to include
copy
< script src = " https://cdn.amcharts.com/lib/4/core.js" > </ script>
< script src = " https://cdn.amcharts.com/lib/4/charts.js" > </ script>
< script src = " https://cdn.amcharts.com/lib/4/themes/animated.js" > </ script>
Basic Stock Chart
Simply define a blank
div
with a unique
id
in your HTML markup. Then initialize the chart via javascript.
Zoom Out 10 -10 0 10 20 30 40 50 60 2,000,000,000 -400,000,000 6,000,000,000 0 4,000,000,000 2,000,000,000 -2,000,000,000 -4,000,000,000 L L 2000 2005 2010 2015 Chart Use left and right arrows to move selection From 2000 to 2014 Use left and right arrows to move left selection From 2000 Use left and right arrows to move right selection To 2014 Use TAB to select grip buttons or left and right arrows to change selection L 2000 2005 2010 2015 100% Chart created using amCharts library
copy
am4core. ready ( function ( ) {
am4core. useTheme ( am4themes_animated) ;
chart = am4core. create ( 'kt_amcharts_1' , am4charts. XYChart) ;
chart. padding ( 0 , 15 , 0 , 15 ) ;
chart. dataSource. url = 'https://www.amcharts.com/wp-content/uploads/assets/stock/MSFT.csv' ;
chart. dataSource. parser = new am4core. CSVParser ( ) ;
chart. dataSource. parser. options. useColumnNames = true ;
chart. dataSource. parser. options. reverse = true ;
chart. leftAxesContainer. layout = 'vertical' ;
var dateAxis = chart. xAxes. push ( new am4charts. DateAxis ( ) ) ;
dateAxis. renderer. grid. template. location = 0 ;
dateAxis. renderer. ticks. template. length = 8 ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.1 ;
dateAxis. renderer. grid. template. disabled = true ;
dateAxis. renderer. ticks. template. disabled = false ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.2 ;
dateAxis. renderer. minLabelPosition = 0.01 ;
dateAxis. renderer. maxLabelPosition = 0.99 ;
dateAxis. keepSelection = true ;
dateAxis. minHeight = 30 ;
dateAxis. groupData = true ;
dateAxis. minZoomCount = 5 ;
var valueAxis = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis. tooltip. disabled = true ;
valueAxis. zIndex = 1 ;
valueAxis. renderer. baseGrid. disabled = true ;
valueAxis. height = am4core. percent ( 65 ) ;
valueAxis. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis. renderer. gridContainer. background. fillOpacity = 0.05 ;
valueAxis. renderer. inside = true ;
valueAxis. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis. renderer. fontSize = '0.8em'
var series = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series. dataFields. dateX = 'Date' ;
series. dataFields. valueY = 'Adj Close' ;
series. tooltipText = '{valueY.value}' ;
series. name = 'MSFT: Value' ;
series. defaultState. transitionDuration = 0 ;
var valueAxis2 = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis2. tooltip. disabled = true ;
valueAxis2. height = am4core. percent ( 35 ) ;
valueAxis2. zIndex = 3
valueAxis2. marginTop = 30 ;
valueAxis2. renderer. baseGrid. disabled = true ;
valueAxis2. renderer. inside = true ;
valueAxis2. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis2. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis2. renderer. fontSize = '0.8em'
valueAxis2. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis2. renderer. gridContainer. background. fillOpacity = 0.05 ;
var series2 = chart. series. push ( new am4charts. ColumnSeries ( ) ) ;
series2. dataFields. dateX = 'Date' ;
series2. dataFields. valueY = 'Volume' ;
series2. yAxis = valueAxis2;
series2. tooltipText = '{valueY.value}' ;
series2. name = 'MSFT: Volume' ;
series2. groupFields. valueY = 'sum' ;
series2. defaultState. transitionDuration = 0 ;
chart. cursor = new am4charts. XYCursor ( ) ;
var scrollbarX = new am4charts. XYChartScrollbar ( ) ;
scrollbarX. series. push ( series) ;
scrollbarX. marginBottom = 20 ;
scrollbarX. scrollbarChart. xAxes. getIndex ( 0 ) . minHeight = undefined ;
chart. scrollbarX = scrollbarX;
} ) ;
< div class = " card card-bordered" >
< div class = " card-body" >
< div id = " kt_amcharts_1" style = " height : 500px; " > </ div>
</ div>
</ div>
< script src = " https://cdn.amcharts.com/lib/4/plugins/rangeSelector.js" > </ script>
Stock Comparison Chart
Simply define a blank
div
with a unique
id
in your HTML markup. Then initialize the chart via javascript.
Zoom Out -100 -300 -200 -100 0 100 200 300 400 1,000,000 -1,000,000 -500,000 0 500,000 1,000,000 1,500,000 L L 2000 2002 2004 2006 2008 2010 Chart Use left and right arrows to move selection From 2000 to 2008 Use left and right arrows to move left selection From 2000 Use left and right arrows to move right selection To 2008 Use TAB to select grip buttons or left and right arrows to change selection L 2000 2002 2004 2006 2008 2010 100% Chart created using amCharts library
copy
am4core. ready ( function ( ) {
am4core. useTheme ( am4themes_animated) ;
var chart = am4core. create ( 'kt_amcharts_2' , am4charts. XYChart) ;
chart. padding ( 0 , 15 , 0 , 15 ) ;
chart. colors. step = 3 ;
var data = [ ] ;
var price1 = 1000 ;
var price2 = 2000 ;
var price3 = 3000 ;
var quantity = 1000 ;
for ( var i = 15 ; i < 3000 ; i++ ) {
price1 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
price2 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
price3 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
if ( price1 < 100 ) {
price1 = 100 ;
}
if ( price2 < 100 ) {
price2 = 100 ;
}
if ( price3 < 100 ) {
price3 = 100 ;
}
quantity += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 500 ) ;
if ( quantity < 0 ) {
quantity *= - 1 ;
}
data. push ( { date: new Date ( 2000 , 0 , i) , price1: price1, price2: price2, price3: price3, quantity: quantity } ) ;
}
chart. data = data;
chart. leftAxesContainer. layout = 'vertical' ;
var dateAxis = chart. xAxes. push ( new am4charts. DateAxis ( ) ) ;
dateAxis. renderer. grid. template. location = 0 ;
dateAxis. renderer. ticks. template. length = 8 ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.1 ;
dateAxis. renderer. grid. template. disabled = true ;
dateAxis. renderer. ticks. template. disabled = false ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.2 ;
dateAxis. renderer. minLabelPosition = 0.01 ;
dateAxis. renderer. maxLabelPosition = 0.99 ;
dateAxis. keepSelection = true ;
dateAxis. groupData = true ;
dateAxis. minZoomCount = 5 ;
var valueAxis = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis. tooltip. disabled = true ;
valueAxis. zIndex = 1 ;
valueAxis. renderer. baseGrid. disabled = true ;
valueAxis. height = am4core. percent ( 65 ) ;
valueAxis. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis. renderer. gridContainer. background. fillOpacity = 0.05 ;
valueAxis. renderer. inside = true ;
valueAxis. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis. renderer. fontSize = '0.8em'
var series1 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series1. dataFields. dateX = 'date' ;
series1. dataFields. valueY = 'price1' ;
series1. dataFields. valueYShow = 'changePercent' ;
series1. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series1. name = 'Stock A' ;
series1. tooltip. getFillFromObject = false ;
series1. tooltip. getStrokeFromObject = true ;
series1. tooltip. background. fill = am4core. color ( '#fff' ) ;
series1. tooltip. background. strokeWidth = 2 ;
series1. tooltip. label. fill = series1. stroke;
var series2 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series2. dataFields. dateX = 'date' ;
series2. dataFields. valueY = 'price2' ;
series2. dataFields. valueYShow = 'changePercent' ;
series2. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series2. name = 'Stock B' ;
series2. tooltip. getFillFromObject = false ;
series2. tooltip. getStrokeFromObject = true ;
series2. tooltip. background. fill = am4core. color ( '#fff' ) ;
series2. tooltip. background. strokeWidth = 2 ;
series2. tooltip. label. fill = series2. stroke;
var series3 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series3. dataFields. dateX = 'date' ;
series3. dataFields. valueY = 'price3' ;
series3. dataFields. valueYShow = 'changePercent' ;
series3. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series3. name = 'Stock C' ;
series3. tooltip. getFillFromObject = false ;
series3. tooltip. getStrokeFromObject = true ;
series3. tooltip. background. fill = am4core. color ( '#fff' ) ;
series3. tooltip. background. strokeWidth = 2 ;
series3. tooltip. label. fill = series3. stroke;
var valueAxis2 = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis2. tooltip. disabled = true ;
valueAxis2. height = am4core. percent ( 35 ) ;
valueAxis2. zIndex = 3
valueAxis2. marginTop = 30 ;
valueAxis2. renderer. baseGrid. disabled = true ;
valueAxis2. renderer. inside = true ;
valueAxis2. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis2. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis2. renderer. fontSize = '0.8em' ;
valueAxis2. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis2. renderer. gridContainer. background. fillOpacity = 0.05 ;
var volumeSeries = chart. series. push ( new am4charts. StepLineSeries ( ) ) ;
volumeSeries. fillOpacity = 1 ;
volumeSeries. fill = series1. stroke;
volumeSeries. stroke = series1. stroke;
volumeSeries. dataFields. dateX = 'date' ;
volumeSeries. dataFields. valueY = 'quantity' ;
volumeSeries. yAxis = valueAxis2;
volumeSeries. tooltipText = 'Volume: {valueY.value}' ;
volumeSeries. name = 'Series 2' ;
volumeSeries. groupFields. valueY = 'sum' ;
volumeSeries. tooltip. label. fill = volumeSeries. stroke;
chart. cursor = new am4charts. XYCursor ( ) ;
var scrollbarX = new am4charts. XYChartScrollbar ( ) ;
scrollbarX. series. push ( series1) ;
scrollbarX. marginBottom = 20 ;
var sbSeries = scrollbarX. scrollbarChart. series. getIndex ( 0 ) ;
sbSeries. dataFields. valueYShow = undefined ;
chart. scrollbarX = scrollbarX;
} ) ;
< div class = " card card-bordered" >
< div class = " card-body" >
< div id = " kt_amcharts_2" style = " height : 500px; " > </ div>
</ div>
</ div>
< script src = " https://cdn.amcharts.com/lib/4/plugins/rangeSelector.js" > </ script>
Variance indicators Chart
Simply define a blank
div
with a unique
id
in your HTML markup. Then initialize the chart via javascript. A clever use of highly configurable clustered Column series and adapters allows automatically-calculated variance indicators.
50% -80% 233% -42% 71% 12% Zoom Out 1,000,000 -200,000 -100,000 0 100,000 200,000 300,000 400,000 500,000 600,000 700,000 800,000 900,000 1,000,000 1,100,000 L 2011 2012 2013 2014 2015 2016 2017 100% Chart created using amCharts library
copy
am4core. ready ( function ( ) {
am4core. useTheme ( am4themes_animated) ;
var chart = am4core. create ( 'kt_amcharts_3' , am4charts. XYChart) ;
chart. padding ( 0 , 15 , 0 , 15 ) ;
chart. colors. step = 3 ;
var data = [ ] ;
var price1 = 1000 ;
var price2 = 2000 ;
var price3 = 3000 ;
var quantity = 1000 ;
for ( var i = 15 ; i < 3000 ; i++ ) {
price1 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
price2 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
price3 += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 100 ) ;
if ( price1 < 100 ) {
price1 = 100 ;
}
if ( price2 < 100 ) {
price2 = 100 ;
}
if ( price3 < 100 ) {
price3 = 100 ;
}
quantity += Math. round ( ( Math. random ( ) < 0.5 ? 1 : - 1 ) * Math. random ( ) * 500 ) ;
if ( quantity < 0 ) {
quantity *= - 1 ;
}
data. push ( { date: new Date ( 2000 , 0 , i) , price1: price1, price2: price2, price3: price3, quantity: quantity } ) ;
}
chart. data = data;
chart. leftAxesContainer. layout = 'vertical' ;
var dateAxis = chart. xAxes. push ( new am4charts. DateAxis ( ) ) ;
dateAxis. renderer. grid. template. location = 0 ;
dateAxis. renderer. ticks. template. length = 8 ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.1 ;
dateAxis. renderer. grid. template. disabled = true ;
dateAxis. renderer. ticks. template. disabled = false ;
dateAxis. renderer. ticks. template. strokeOpacity = 0.2 ;
dateAxis. renderer. minLabelPosition = 0.01 ;
dateAxis. renderer. maxLabelPosition = 0.99 ;
dateAxis. keepSelection = true ;
dateAxis. groupData = true ;
dateAxis. minZoomCount = 5 ;
var valueAxis = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis. tooltip. disabled = true ;
valueAxis. zIndex = 1 ;
valueAxis. renderer. baseGrid. disabled = true ;
valueAxis. height = am4core. percent ( 65 ) ;
valueAxis. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis. renderer. gridContainer. background. fillOpacity = 0.05 ;
valueAxis. renderer. inside = true ;
valueAxis. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis. renderer. fontSize = '0.8em'
var series1 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series1. dataFields. dateX = 'date' ;
series1. dataFields. valueY = 'price1' ;
series1. dataFields. valueYShow = 'changePercent' ;
series1. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series1. name = 'Stock A' ;
series1. tooltip. getFillFromObject = false ;
series1. tooltip. getStrokeFromObject = true ;
series1. tooltip. background. fill = am4core. color ( '#fff' ) ;
series1. tooltip. background. strokeWidth = 2 ;
series1. tooltip. label. fill = series1. stroke;
var series2 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series2. dataFields. dateX = 'date' ;
series2. dataFields. valueY = 'price2' ;
series2. dataFields. valueYShow = 'changePercent' ;
series2. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series2. name = 'Stock B' ;
series2. tooltip. getFillFromObject = false ;
series2. tooltip. getStrokeFromObject = true ;
series2. tooltip. background. fill = am4core. color ( '#fff' ) ;
series2. tooltip. background. strokeWidth = 2 ;
series2. tooltip. label. fill = series2. stroke;
var series3 = chart. series. push ( new am4charts. LineSeries ( ) ) ;
series3. dataFields. dateX = 'date' ;
series3. dataFields. valueY = 'price3' ;
series3. dataFields. valueYShow = 'changePercent' ;
series3. tooltipText = '{name}: {valueY.changePercent.formatNumber(' [ #0 c0] + #.00 | [ #c00] #. ##| 0 ')}%' ;
series3. name = 'Stock C' ;
series3. tooltip. getFillFromObject = false ;
series3. tooltip. getStrokeFromObject = true ;
series3. tooltip. background. fill = am4core. color ( '#fff' ) ;
series3. tooltip. background. strokeWidth = 2 ;
series3. tooltip. label. fill = series3. stroke;
var valueAxis2 = chart. yAxes. push ( new am4charts. ValueAxis ( ) ) ;
valueAxis2. tooltip. disabled = true ;
valueAxis2. height = am4core. percent ( 35 ) ;
valueAxis2. zIndex = 3
valueAxis2. marginTop = 30 ;
valueAxis2. renderer. baseGrid. disabled = true ;
valueAxis2. renderer. inside = true ;
valueAxis2. renderer. labels. template. verticalCenter = 'bottom' ;
valueAxis2. renderer. labels. template. padding ( 2 , 2 , 2 , 2 ) ;
valueAxis2. renderer. fontSize = '0.8em' ;
valueAxis2. renderer. gridContainer. background. fill = am4core. color ( '#000000' ) ;
valueAxis2. renderer. gridContainer. background. fillOpacity = 0.05 ;
var volumeSeries = chart. series. push ( new am4charts. StepLineSeries ( ) ) ;
volumeSeries. fillOpacity = 1 ;
volumeSeries. fill = series1. stroke;
volumeSeries. stroke = series1. stroke;
volumeSeries. dataFields. dateX = 'date' ;
volumeSeries. dataFields. valueY = 'quantity' ;
volumeSeries. yAxis = valueAxis2;
volumeSeries. tooltipText = 'Volume: {valueY.value}' ;
volumeSeries. name = 'Series 2' ;
volumeSeries. groupFields. valueY = 'sum' ;
volumeSeries. tooltip. label. fill = volumeSeries. stroke;
chart. cursor = new am4charts. XYCursor ( ) ;
var scrollbarX = new am4charts. XYChartScrollbar ( ) ;
scrollbarX. series. push ( series1) ;
scrollbarX. marginBottom = 20 ;
var sbSeries = scrollbarX. scrollbarChart. series. getIndex ( 0 ) ;
sbSeries. dataFields. valueYShow = undefined ;
chart. scrollbarX = scrollbarX;
} ) ;
< div class = " card card-bordered" >
< div class = " card-body" >
< div id = " kt_amcharts_3" style = " height : 500px; " > </ div>
</ div>
</ div>