Introduction
ReactJs is bascially an open-source JavaScript library, used to build user interfaces for specific applications on a single page. It is used for web and mobile app view layer management. We can also create reusable components of the UI in react.
Features
One-way data binding with props:
- function Welcome(props) {
- return <h1>Hello, {props.name}</h1>;
- }
- class ParentComponent extends React.Component {
- state = { color: 'green' };
- render() {
- return (
- <ChildComponent color={this.state.color} />
- );
- }
- }
Testability
BENEFITS
- Single Page Application.
- Entire page remains same but only few components change.
- Code is easy to scale and maintain.
- More functionalities as HTML is created from JS
- Isomorphic Rendering(Server side rendering)
- Blazing speed
What is amCharts?
A go-to library for data visualization. You can use amCharts if you need a simple yet powerful and flexible drop-in data visualization solution. amCharts 4 includes both charts and geographical maps.
Benefits of Charts over Grid
- Increasing precision when graphs are large.
- Enhancing the perception of small differences.
- Assisting the comparison of values along the categorical scale.
- Narrowing the focus to a specific area.
Final Output

Implementation
To create a React app you must have Node 8.10.0 or later installed on your local machine.
- npx create-react-app my-app
- npm init react-app my-app
- yarn create react-app my-app
- cd chartapp
- npm install
- npm start
Install amCharts
- npm install @amcharts/amcharts4
Create Data Source
In this example I have used .JSX file that exports data for our chart, you can use Web API, JSON File or any other data source.
- const SalesData = [{
- "date": "2013-01-16",
- "market1": 71,
- "market2": 75,
- "sales1": 5,
- "sales2": 8
- }, {
- "date": "2013-01-17",
- "market1": 74,
- "market2": 78,
- "sales1": 4,
- "sales2": 6
- }, {
- "date": "2013-01-18",
- "market1": 78,
- "market2": 88,
- "sales1": 5,
- "sales2": 2
- }, {
- "date": "2013-01-19",
- "market1": 85,
- "market2": 89,
- "sales1": 8,
- "sales2": 9
- }, {
- "date": "2013-01-20",
- "market1": 82,
- "market2": 89,
- "sales1": 9,
- "sales2": 6
- }, {
- "date": "2013-01-21",
- "market1": 83,
- "market2": 85,
- "sales1": 3,
- "sales2": 5
- }, {
- "date": "2013-01-22",
- "market1": 88,
- "market2": 92,
- "sales1": 5,
- "sales2": 7
- }, {
- "date": "2013-01-23",
- "market1": 85,
- "market2": 90,
- "sales1": 7,
- "sales2": 6
- }, {
- "date": "2013-01-24",
- "market1": 85,
- "market2": 91,
- "sales1": 9,
- "sales2": 5
- }, {
- "date": "2013-01-25",
- "market1": 80,
- "market2": 84,
- "sales1": 5,
- "sales2": 8
- }, {
- "date": "2013-01-26",
- "market1": 87,
- "market2": 92,
- "sales1": 4,
- "sales2": 8
- }, {
- "date": "2013-01-27",
- "market1": 84,
- "market2": 87,
- "sales1": 3,
- "sales2": 4
- }, {
- "date": "2013-01-28",
- "market1": 83,
- "market2": 88,
- "sales1": 5,
- "sales2": 7
- }, {
- "date": "2013-01-29",
- "market1": 84,
- "market2": 87,
- "sales1": 5,
- "sales2": 8
- }, {
- "date": "2013-01-30",
- "market1": 81,
- "market2": 85,
- "sales1": 4,
- "sales2": 7
- }]
- export default SalesData;
Create a Component for Chart
Create a Component for Sales Chart. It’s good to use separate folder for Charts, Components, Forms, Etc. For code structure.
- import * as am4core from "@amcharts/amcharts4/core";
- import * as am4charts from "@amcharts/amcharts4/charts";
- import am4themes_animated from "@amcharts/amcharts4/themes/animated";
Second, we have to import data for our chart in our component. Path varies based on where you have created your data source.
- import SalesData from '../../Data/SalesData'
- componentDidMount() {
- // Use theme
- am4core.useTheme(am4themes_animated);
- // Create Chart
- let chart = am4core.create("SalesChart", am4charts.XYChart); // here Saleschart is the ID of a div
- // Add data
- chart.data = SalesData;
- }
- import React, { Component } from 'react'
- import * as am4core from "@amcharts/amcharts4/core";
- import * as am4charts from "@amcharts/amcharts4/charts";
- import am4themes_animated from "@amcharts/amcharts4/themes/animated";
- import SalesData from '../../Data/SalesData'
- export default class Sales extends Component {
- componentDidMount() {
- am4core.useTheme(am4themes_animated);
- let chart = am4core.create("SalesChart", am4charts.XYChart);
- // Add data
- chart.data = SalesData;
- // Create axes
- let dateAxis = chart.xAxes.push(new am4charts.DateAxis());
- //dateAxis.renderer.grid.template.location = 0;
- //dateAxis.renderer.minGridDistance = 30;
- let valueAxis1 = chart.yAxes.push(new am4charts.ValueAxis());
- valueAxis1.title.text = "Sales";
- let valueAxis2 = chart.yAxes.push(new am4charts.ValueAxis());
- valueAxis2.title.text = "Market Days";
- valueAxis2.renderer.opposite = true;
- valueAxis2.renderer.grid.template.disabled = true;
- // Create series
- let series1 = chart.series.push(new am4charts.ColumnSeries());
- series1.dataFields.valueY = "sales1";
- series1.dataFields.dateX = "date";
- series1.yAxis = valueAxis1;
- series1.name = "Target Sales";
- series1.tooltipText = "{name}\n[bold font-size: 20]${valueY}M[/]";
- series1.fill = chart.colors.getIndex(0);
- series1.strokeWidth = 0;
- series1.clustered = false;
- series1.columns.template.width = am4core.percent(40);
- let series2 = chart.series.push(new am4charts.ColumnSeries());
- series2.dataFields.valueY = "sales2";
- series2.dataFields.dateX = "date";
- series2.yAxis = valueAxis1;
- series2.name = "Actual Sales";
- series2.tooltipText = "{name}\n[bold font-size: 20]${valueY}M[/]";
- series2.fill = chart.colors.getIndex(0).lighten(0.5);
- series2.strokeWidth = 0;
- series2.clustered = false;
- series2.toBack();
- let series3 = chart.series.push(new am4charts.LineSeries());
- series3.dataFields.valueY = "market1";
- series3.dataFields.dateX = "date";
- series3.name = "Market Days";
- series3.strokeWidth = 2;
- series3.tensionX = 0.7;
- series3.yAxis = valueAxis2;
- series3.tooltipText = "{name}\n[bold font-size: 20]{valueY}[/]";
- let bullet3 = series3.bullets.push(new am4charts.CircleBullet());
- bullet3.circle.radius = 3;
- bullet3.circle.strokeWidth = 2;
- bullet3.circle.fill = am4core.color("#fff");
- let series4 = chart.series.push(new am4charts.LineSeries());
- series4.dataFields.valueY = "market2";
- series4.dataFields.dateX = "date";
- series4.name = "Market Days ALL";
- series4.strokeWidth = 2;
- series4.tensionX = 0.7;
- series4.yAxis = valueAxis2;
- series4.tooltipText = "{name}\n[bold font-size: 20]{valueY}[/]";
- series4.stroke = chart.colors.getIndex(0).lighten(0.5);
- series4.strokeDasharray = "3,3";
- let bullet4 = series4.bullets.push(new am4charts.CircleBullet());
- bullet4.circle.radius = 3;
- bullet4.circle.strokeWidth = 2;
- bullet4.circle.fill = am4core.color("#fff");
- // Add cursor
- chart.cursor = new am4charts.XYCursor();
- // Add legend
- chart.legend = new am4charts.Legend();
- chart.legend.position = "top";
- // Add scrollbar
- chart.scrollbarX = new am4charts.XYChartScrollbar();
- chart.scrollbarX.series.push(series1);
- chart.scrollbarX.series.push(series3);
- chart.scrollbarX.parent = chart.bottomAxesContainer;
- this.chart = chart;
- }
- componentWillUnmount() {
- if (this.chart) {
- this.chart.dispose();
- }
- }
- render() {
- return (
- <div>
- <div id="SalesChart" style={{ width: "100%", height: "500px" }}></div>
- </div>
- )
- }
- }
Import Chart Component on Your Page,
- import React, { Component } from 'react';
- import logo from './logo.svg';
- import './App.css';
- import SalesChart from './Components/Charts/Sales';
- class App extends Component {
- render() {
- return (
- <div className="App">
- <header className="App-header">
- <img src={logo} className="App-logo" alt="logo" width="200" height="200" />
- <SalesChart />
- </header>
- </div>
- );
- }
- }
- export default App;
Join the conversation! Your thoughts help the community grow.