This guide describes how to integrate Flexmonster with amCharts – a JavaScript library for interactive data visualization.
This tutorial is split into the following sections:
Data preprocessed by Flexmonster Connector for amCharts is represented as an array of objects. All amCharts chart types accept this data format, so Flexmonster supports all of them.
See how to integrate the component with different chart types:
More ready-to-use examples of integration with amCharts are available on the Examples page.
The steps below describe how to create a pie chart based on data received from the component. To integrate Flexmonster with other chart types, refer to the amCharts documentation.
Add Flexmonster to your webpage and configure a simple report (e.g., based on a JSON or CSV data source). Replace "XXXX-XXXX-XXXX-XXXX-XXXX"
with your license key. If you don’t have a license key, contact our team and request a special trial key.
<div id="pivotContainer">The component will appear here</div> <script src="https://cdn.flexmonster.com/flexmonster.js"></script> <script> let pivot = new Flexmonster({ container: "pivotContainer", componentFolder: "https://cdn.flexmonster.com/", height: 300, report: { dataSource: { filename: "data/data.csv" }, slice: { rows: [ { uniqueName: "Country" } ], columns: [ { uniqueName: "Color" }, { uniqueName: "[Measures]" } ], measures: [ { uniqueName: "Price" } ] } }, licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX" }); </script>
Include the amCharts files to your webpage:
<script src="https://www.amcharts.com/lib/4/core.js"></script>
<script src="https://www.amcharts.com/lib/4/charts.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
Including files directly to the webpage is one of the possible ways to add amCharts. Refer to the amCharts installation guide for other ways of adding amCharts.
Flexmonster Connector for amCharts provides ready-to-use methods for easy and smooth integration with amCharts. Add it to your webpage with the following lines of code:
<script src="https://cdn.flexmonster.com/lib/flexmonster.amcharts.js"></script>
Add a container for the chart:
<div id="amchartsContainer"></div>
A chart should be created only when the component is ready to provide the data. To track this, use the reportcomplete
event:
let pivot = new Flexmonster({ container: "#pivotContainer", componentFolder: "https://cdn.flexmonster.com/", report: { // the report from the 1st step }, licenseKey: "XXXX-XXXX-XXXX-XXXX-XXXX", reportcomplete: function() { pivot.off("reportcomplete"); createChart(); } });
When data loading is complete, the event handler will invoke the createChart()
function to draw the chart.
The implementation of the createChart()
function is given below.
Declare a variable to work with the chart instance:
let chart;
Note The variable should be visible to functions that draw and redraw the chart.
The Connector for amCharts extends the Flexmonster API with the amcharts.getData()
method, which requests data from the component and structures it to the format required by amCharts. Call the amcharts.getData()
method to get data from the component:
function createChart() { pivot.amcharts.getData({}, drawChart, updateChart); }
Note Data returned by the amcharts.getData()
method contains fields specified in the report.slice
object. If the amcharts.getData()
method gets a slice as a parameter, the data is prepared according to it.
See more details about the amcharts.getData() method.
The drawChart()
function initializes the chart, configures it, and fills the chart with data provided by the amcharts.getData()
method:
function drawChart(chartData, rawData) { // initialize the chart let chart = am4core.create("amchartsContainer", am4charts.PieChart); //fill the chart with the data from Flexmonster chart.data = chartData.data; chart.legend = new am4charts.Legend(); // Create pie series let series = chart.series.push(new am4charts.PieSeries()); series.dataFields.category = pivot.amcharts.getCategoryName(rawData); series.dataFields.value = pivot.amcharts.getMeasureNameByIndex(rawData, 0); }
Notice the following lines in the code snippet:
series.dataFields.category = pivot.amcharts.getCategoryName(rawData); series.dataFields.value = pivot.amcharts.getMeasureNameByIndex(rawData, 0);
The amcharts.getCategoryName()
method is used to set the category name for the amCharts Category axis. Learn more about how the method chooses the category name.
Then, getMeasureNameByIndex()
sets the value for the Value axis.
For more details on how the pie chart is created, see the amCharts documentation.
Create a function that will redraw the chart once the report is updated (e.g., when the data is filtered, sorted, etc.):
function updateChart(chartData, rawData) {
chart.dispose();
drawChart(chartData, rawData);
}
When the data is updated, this function will dispose of the current chart and draw a new chart based on the updated data.
Launch your webpage from a browser and see an interactive pie chart displaying data from the component. Check out a live example on JSFiddle.
This section explains how Flexmonster Connector for amCharts preprocesses data for the chart.
The amcharts.getData()
method returns data as an array of objects. It is the format required by amCharts. For example:
[ { "categoryName": "value", "measureName 1": "value", … "measureName n": "value", } … ]
The object contains only one category field as well as all the measures from the slice.
A field to represent the category is chosen as follows:
slice.rows
array is empty and the slice.columns array contains some fields, the first field from columns is chosen as the category.If both slice.rows
and slice.columns
are empty, then no category is available, and amcharts.getCategoryName()
will return undefined
.
In such cases, the getMeasureNameByIndex()
method can be used to select the category for the series.
The Connector allows using a number format set via the FormatObject for amCharts as well. The amcharts.getNumberFormatPattern()
method converts the FormatObject received from the component to the amCharts number formatting string.
When the formatting string is prepared by the method, the following properties of the FormatObject are considered:
decimalPlaces
maxDecimalPlaces
negativeNumberFormat
(only the -1
and (1)
formats are available)currencySymbol
positiveCurrencyFormat
negativeCurrencyFormat
(only the $-1
, -1$
, ($1)
, (1$)
formats are available)isPercent
Regardless of the configuration set in the FormatObject, the thousandsSeparator
and decimalSeparator
format parameters always have constant values. These values are ,
for thousandsSeparator
and .
for decimalSeparator
. amCharts imposes this limitation as it uses predefined separators for decimals and thousands.
Here is an example of the formatting string returned by the amcharts.getNumberFormatPattern()
method:
'$'#,###.00|'($'#,###.00')'
The part of the string before |
defines the positive number format. The part of the string after |
defines the negative number format. For example, 1205
will be shown as $1,205.00
, and -1205
will be shown as ($1,205.00)
.
You may be interested in the following articles: