Skip to content

Modus-Logo-Long-BlackCreated with Sketch.

  • Services
  • Work
  • Blog
  • Resources

    OUR RESOURCES

    Innovation Podcast

    Explore transformative innovation with industry leaders.

    Guides & Playbooks

    Implement leading digital innovation with our strategic guides.

    Practical guide to building an effective AI strategy
  • Who we are

    Our story

    Learn about our values, vision, and commitment to client success.

    Open Source

    Discover how we contribute to and benefit from the global open source ecosystem.

    Careers

    Join our dynamic team and shape the future of digital transformation.

    How we built our unique culture
  • Let's talk
  • EN
  • FR

Ext JS to React: Charting

Published on April 24, 2018
Last Updated on April 8, 2021
Application Development

This is part of the Ext JS to React blog series. You can review the code from this article on the Ext JS to React Git repo.

React doesn’t ship with any visualization components, but fortunately there are a few very nice pre-built charting packages out there for us: D3 visualization library, Victory Charts, and Recharts amongst others. Through the course of this article, we’ll narrow our focus by looking only at Recharts as a replacement for the charts package available with Ext JS. The examples presented below demonstrate some of the more common chart types used. As you look over the Recharts examples and API, you’ll see that the offering is fairly robust with a multitude of configuration options available for each chart type. Additionally, they’re MIT licensed so you got that going for you, which is nice.

Note: While not a requirement for React, this article’s code examples assume you’re starting with a starter app generated by create-react-app.

Install Recharts

npm install --save recharts

Recharts has a number of charting options available that we won’t use in each of the examples below. However, let’s mention a few of them, as they’ll likely be features you’ll want in your charts:

  • ReponsiveContainer: A wrapping container that sizes child charts to the size of a parent container
  • Legend: The legend used to label the series elements of the chart
  • Tooltip: A floating tooltip element corresponding to the chart’s data points
  • Cell: A styling element that can be used to set unique styles on one or more elements in Pie, Bar, and RadialBar charts

Sample Chart Data

All of the charts require an array of data objects in order to populate their series. The dataset we’ll use for all of the following chart examples will be located in src/data.js:

export default [
  {name: 'Page A', uv: 4000, pv: 2400},
  {name: 'Page B', uv: 3000, pv: 1398},
  {name: 'Page C', uv: 2000, pv: 9800},
  {name: 'Page D', uv: 2780, pv: 3908},
  {name: 'Page E', uv: 1890, pv: 4800},
  {name: 'Page F', uv: 2390, pv: 3800},
  {name: 'Page G', uv: 3490, pv: 4300}
];

Note: For charts with multiple overlapping series, the series are painted in layers in the order they’re composed within the parent ComposedChart component. This means that if we have a Line and Bar series, and we want the line to appear on top of the bars, we’ll need to define the Bar series first and then the Line:

<ParentChart>
  {/* Bar is listed first and draw first so it will be on bottom*/}
  <Bar />
  {/* Line is listed last and draw last so it will be on top */}
  <Line />
</ParentChart>

Cartesian Charts

Axis Options

Cartesian charts can be decorated with an XAxis (top and bottom) and YAxis (left and right). The axis can be distributed naturally or logarithmically. For the remaining examples, we’ll keep the axis configurations pretty simple, but the API certainly deserves a deeper look to see just how flexible the package is.

Bar (Column) Chart

The first chart we’ll take a look at is the BarChart using the Bar series. Each bar chart is configurable with a layout prop to orient the bar series as “horizontal” or “vertical”. The default is “horizontal” which renders the bars from the series across the x-axis in what is referred to in Ext JS chart examples as a “column chart”.

The following chart produces a bar chart with a grid overlay, legend, and two bar series:

import React from 'react';
import {BarChart, Bar, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <BarChart width={730} height={250} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Legend />
      <Bar dataKey="pv" fill="#8884d8" />
      <Bar dataKey="uv" fill="#82ca9d" />
    </BarChart>
  );
};
Ext JS to React: Charts, Bar Chart

You can review the sample code on the Git repo.

Bar Chart (Flipped)

The same chart can be displayed with the series oriented vertically. The bar series’ layout prop can be set as “vertical” in order to orient the bars along the y-axis, the same as configuring flipXY: true on the Ext JS cartesian charts. The XAxis defaults to type “category” and the YAxis to “number”. In the following example, we flip those so that the category is aligned along the left edge.

import React from 'react';
import {BarChart, Bar, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <BarChart width={730} height={250} data={data} layout="vertical">
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis type="number"/>
      <YAxis dataKey="name" type="category"/>
      <Legend />
      <Bar dataKey="pv" fill="#8884d8" />
      <Bar dataKey="uv" fill="#82ca9d" />
    </BarChart>
  );
};
Ext JS to React: Charts, Vertical Bar Chart

You can review the sample code on the Git repo.

Stacked Chart

Bar charts can render its series as stacked by setting stackId on each Bar component. Series whose stackId values match will be stacked together: This is similar to setting stacked: true on Ext JS’s Bar, Area, or Bar3D charts.

import React from 'react';
import {BarChart, Bar, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <BarChart width={730} height={250} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Legend />
      <Bar dataKey="pv" stackId="a" fill="#8884d8" />
      <Bar dataKey="uv" stackId="a" fill="#82ca9d" />
    </BarChart>
  );
};
Ext JS to React: Charts, Stacked Bar Chart

You can review the sample code on the Git repo.

Line Chart

By switching over to a LineChart and the Line series components we can represent the same dataset with a line connecting data points. The series color is set with stroke instead of fill since we’ve switched from polygons to lines in the series. The type prop determines the shape of the line. In this case, “monotone” is set to apply a smoothing effect.

import React from 'react';
import {LineChart, Line, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <LineChart width={730} height={250} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Legend />
      <Line type="monotone" dataKey="pv" stroke="#8884d8" />
      <Line type="monotone" dataKey="uv" stroke="#82ca9d" />
    </LineChart>
  );
};
Ext JS to React: Charts, Line Chart

You can review the sample code on the Git repo.

Area Chart

The AreaChart component renders out the same as a line chart, but with the lower portion of the series filled in. By setting a fill color and fillOpacity of the Area series below, we can add the shading below the line.

import React from 'react';
import {AreaChart, Area, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <AreaChart width={730} height={250} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Legend />
      <Area type="monotone" dataKey="pv" fill="#8884d8" fillOpacity={.6} />
      <Area type="monotone" dataKey="uv" fill="#82ca9d" fillOpacity={.6} />
    </AreaChart>
  );
};
Ext JS to React: Charts, Area Chart

You can review the sample code on the Git repo.

Scatter Chart

The same dataset can be plotted using a ScatterChart by creating a point at the intersection of two data points across the x and y-axis. To do this we’ll employ the ScatterChart and Scatter series components. The data prop is dropped from the chart component itself and moved to the series. Both the x and y-axis receive a dataKey prop corresponding to the key from our dataset they’re meant to track with.

import React from 'react';
import {ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <ScatterChart width={730} height={250}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="uv" />
      <YAxis dataKey="pv" />
      <Legend />
      <Scatter name='uv / pv' data={data} fill='#8884d8'/>
    </ScatterChart>
  );
};
Ext JS to React: Charts, Scatter Chart

You can review the sample code on the Git repo.

Combined Series Chart

The Line, Area, and Bar series can be combined on the same chart using ComposedChart. Each series may be configured with their own dataKey or may use the same one if two series should display the same data. In the example below, we’ll have the two series represent the same data from the dataset by using dataKey="uv":

import React from 'react';
import {ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Legend} from 'recharts';
import data from './data';

export default () => {
  return (
    <ComposedChart width={730} height={250} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Legend />
      <Bar dataKey="uv" fill="#8884d8" />
      <Line dataKey="uv" stroke="#82ca9d" />
    </ComposedChart>
  );
};
Ext JS to React: Charts, Combined Chart

You can review the sample code on the Git repo.

Polar Charts

Pie Chart

We can use the same example dataset from the cartesian charts to render a polar charts such as the PieChart. The label prop in the Pie series creates callout labels for each slice.

import React from 'react';
import {PieChart, Pie} from 'recharts';
import data from './data';

export default () => {
  return (
    <PieChart width={350} height={300} data={data}>
      <Pie data={data} dataKey="uv" fill="#8884d8" label/>
    </PieChart>
  );
};
Ext JS to React: Charts, Pie Chart

Love the look of donut charts? Simply set the Pie component’s internalRadius prop to a percentage smaller than the outerRadius (which defaults to 80%) to create a donut chart from the pie chart.

You can review the sample code on the Git repo.

Radar Chart

The RadarChart component is another polar chart, but with a child component list closer to what we’re used to seeing in the cartesian charts. Radar charts have two axis components. PolarAngleAxis serves to label the data points using the “name” key from our dataset. PolarRadiusAxis creates the linear axis line and labels across the chart to indicate the steps along the radial portions of the chart (seen as 0 – 10000 in the example below).

import React from 'react';
import {RadarChart, Radar, PolarGrid, Legend, PolarAngleAxis, PolarRadiusAxis} from 'recharts';
import data from './data';

export default () => {
  return (
    <RadarChart width={350} height={300} data={data}>
      <PolarGrid gridType="circle" />
      <Legend />
      <PolarAngleAxis dataKey="name" />
      <PolarRadiusAxis angle={90} />
      <Radar name="uv" dataKey="uv" stroke="#8884d8" fill="#8884d8" fillOpacity={0.6}/>
      <Radar name="pv" dataKey="pv" stroke="#82ca9d" fill="#82ca9d" fillOpacity={0.6}/>
    </RadarChart>
  );
};
Ext JS to React: Charts, Radar Chart

You can review the sample code on the Git repo.

Wrap Up

There are quite a few quality options for pre-built charts libraries out there for use in your React projects. Some of them are free and open source like Recharts while some carry a commercial license. We liked Recharts quite a bit for most use cases, though Victory Charts from Formidable caught our eye as well. You can even use the venerable D3 visualization library in your React projects (which we did ourselves on our sample Budgeting App). Or maybe make your own charts lib, you rockstar, you!

If through your travels you’ve found / authored a favorite charts library, please share in the comments section!

Posted in Application Development
Share this

Mitchell Simoens

Mitchell Simoens is a Senior Front End Engineer at Modus Create. Mitchell has spent the last 10 years working with Ext JS including developing core functionality, Sencha Fiddle and (I hope your insurance covers blown minds) supporting the online community with over 40,000 posts on the Sencha Forums. Before working with Ext JS, Mitchell used Perl and PHP but loves spending time with Node JS for today's needs. When not working, you can find Mitchell relaxing with his wife and daughter, or developing his talents as an amateur furniture maker.
Follow

Related Posts

  • React Landing
    Ext JS to React: Migration to Open Source

    Worried about Migrating from Ext JS? Modus has the Answers Idera’s acquisition of Sencha has…

  • Ext JS to React: FAQ
    Ext JS to React: FAQ

    This is part of the Ext JS to React blog series. React is Facebook's breakout…

Want more insights to fuel your innovation efforts?

Sign up to receive our monthly newsletter and exclusive content about digital transformation and product development.

What we do

Our services
AI and data
Product development
Design and UX
IT modernization
Platform and MLOps
Developer experience
Security

Our partners
Atlassian
AWS
GitHub
Other partners

Who we are

Our story
Careers
Open source

Our work

Our case studies

Our resources

Blog
Innovation podcast
Guides & playbooks

Connect with us

Get monthly insights on AI adoption

© 2025 Modus Create, LLC

Privacy PolicySitemap
Scroll To Top
  • Services
  • Work
  • Blog
  • Resources
    • Innovation Podcast
    • Guides & Playbooks
  • Who we are
    • Our story
    • Careers
  • Let’s talk
  • EN
  • FR