{"id":1499,"date":"2023-05-17T00:00:00","date_gmt":"2023-05-16T22:00:00","guid":{"rendered":"https:\/\/demo.sidekick.be\/itenium\/what-chart-library-to-use-in-react\/"},"modified":"2025-11-28T13:31:43","modified_gmt":"2025-11-28T12:31:43","slug":"what-chart-library-to-use-in-react","status":"publish","type":"post","link":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/","title":{"rendered":"What chart library to use in React?"},"content":{"rendered":"<h1 id=\"charting-libraries\">Charting Libraries<\/h1>\n<p><a href=\"https:\/\/github.com\/recharts\/recharts\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/recharts\/recharts.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/recharts\/recharts\">recharts\/recharts<\/a>: A Redefined chart library built on d3 <a href=\"https:\/\/github.com\/airbnb\/visx\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/airbnb\/visx.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/airbnb\/visx\">airbnb\/visx<\/a>: A collection of reusable low-level visualization components. Built on d3 <a href=\"https:\/\/github.com\/plouc\/nivo\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/plouc\/nivo.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/plouc\/nivo\">plouc\/nivo<\/a>: Nivo provides supercharged React components to easily build dataviz apps, built on d3. <a href=\"https:\/\/github.com\/FormidableLabs\/victory\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/FormidableLabs\/victory.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/FormidableLabs\/victory\">FormidableLabs\/victory<\/a>: A collection of components for building interactive data visualizations. Built on d3 <a href=\"https:\/\/github.com\/uber\/react-vis\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/uber\/react-vis.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/uber\/react-vis\">uber\/react-vis<\/a>: A collection of components to render common data visualization charts. Built on d3 <a href=\"https:\/\/github.com\/reactchartjs\/react-chartjs-2\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/reactchartjs\/react-chartjs-2.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/reactchartjs\/react-chartjs-2\">reactchartjs\/react-chartjs-2<\/a>: React components for Chart.js, the most popular charting library<\/p>\n<p> Many are built using the very versatile <a href=\"https:\/\/d3js.org\/\">d3.js<\/a> library:<\/p>\n<p><a href=\"https:\/\/github.com\/d3\/d3\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/d3\/d3.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/d3\/d3\">d3\/d3<\/a>: Bring data to life with SVG, Canvas and HTML. \ud83d\udcca\ud83d\udcc8\ud83c\udf89<\/p>\n<p> If you already used <code>Chart.js<\/code> before, you may want to choose for the <code>react-chartjs-2<\/code> wrapper:<br \/><a href=\"https:\/\/github.com\/chartjs\/Chart.js\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/chartjs\/Chart.js.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/chartjs\/Chart.js\">chartjs\/Chart.js<\/a>: Simple HTML5 Charts using the canvas tag<\/p>\n<h2 id=\"overview\">Overview<\/h2>\n<table class=\"table-code\">\n<thead>\n<tr>\n<th>Library<\/th>\n<th style=\"text-align: right\">Package size<\/th>\n<th style=\"text-align: right\">Weekly downloads<\/th>\n<th style=\"text-align: center\">Rendering type<\/th>\n<th style=\"text-align: center\">Pricing<\/th>\n<th style=\"text-align: center\">Documentation<\/th>\n<th style=\"text-align: center\">Setup time demo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Recharts<\/td>\n<td style=\"text-align: right\">4.52 MB<\/td>\n<td style=\"text-align: right\">1,278,432<\/td>\n<td style=\"text-align: center\">Svg<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Very good<\/td>\n<td style=\"text-align: center\">15:10<\/td>\n<\/tr>\n<tr>\n<td>Visx<\/td>\n<td style=\"text-align: right\">440 kB<\/td>\n<td style=\"text-align: right\">363,002<\/td>\n<td style=\"text-align: center\">Svg<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Very good<\/td>\n<td style=\"text-align: center\">28:58<\/td>\n<\/tr>\n<tr>\n<td>Nivo<\/td>\n<td style=\"text-align: right\">2.81 MB<\/td>\n<td style=\"text-align: right\">296,292<\/td>\n<td style=\"text-align: center\">Svg \/ HTML \/ Canvas<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Good<\/td>\n<td style=\"text-align: center\">28:31<\/td>\n<\/tr>\n<tr>\n<td>Victory<\/td>\n<td style=\"text-align: right\">2.95 MB<\/td>\n<td style=\"text-align: right\">192,203<\/td>\n<td style=\"text-align: center\">Svg<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Very good<\/td>\n<td style=\"text-align: center\">11:10<\/td>\n<\/tr>\n<tr>\n<td>React-vis<\/td>\n<td style=\"text-align: right\">1.80 MB<\/td>\n<td style=\"text-align: right\">155,768<\/td>\n<td style=\"text-align: center\">Svg \/ Canvas<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Ok<\/td>\n<td style=\"text-align: center\">34:39<\/td>\n<\/tr>\n<tr>\n<td>React-chartjs-2<\/td>\n<td style=\"text-align: right\">4.88 MB<\/td>\n<td style=\"text-align: right\">948,010<\/td>\n<td style=\"text-align: center\">Canvas<\/td>\n<td style=\"text-align: center\">MIT<\/td>\n<td style=\"text-align: center\">Ok<\/td>\n<td style=\"text-align: center\">35:11<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"table-code\">\n<thead>\n<tr>\n<th>Library<\/th>\n<th style=\"text-align: center\">Dependency<\/th>\n<th style=\"text-align: center\">Commits<\/th>\n<th style=\"text-align: center\">Issues<\/th>\n<th style=\"text-align: center\">Charts<\/th>\n<th style=\"text-align: center\">Storybook<\/th>\n<th>Docs<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Recharts<\/td>\n<td style=\"text-align: center\">D3<\/td>\n<td style=\"text-align: center\">2 days ago (2,254)<\/td>\n<td style=\"text-align: center\">470 \/ 2220<\/td>\n<td style=\"text-align: center\">11<\/td>\n<td style=\"text-align: center\">WIP<\/td>\n<td><a href=\"https:\/\/recharts.org\/en-US\/examples\">Examples<\/a><\/td>\n<\/tr>\n<tr>\n<td>Visx<\/td>\n<td style=\"text-align: center\">D3<\/td>\n<td style=\"text-align: center\">1 month ago (3,156)<\/td>\n<td style=\"text-align: center\">117 \/ 608<\/td>\n<td style=\"text-align: center\">20+<\/td>\n<td style=\"text-align: center\">CodeSandbox<\/td>\n<td><a href=\"https:\/\/airbnb.io\/visx\/gallery\">Somewhat Interactive<\/a><\/td>\n<\/tr>\n<tr>\n<td>Nivo<\/td>\n<td style=\"text-align: center\">D3<\/td>\n<td style=\"text-align: center\">4 days ago (1,992)<\/td>\n<td style=\"text-align: center\">81 \/ 1393<\/td>\n<td style=\"text-align: center\">20<\/td>\n<td style=\"text-align: center\">YES<\/td>\n<td><a href=\"https:\/\/nivo.rocks\/\">Very Interactive<\/a><\/td>\n<\/tr>\n<tr>\n<td>Victory<\/td>\n<td style=\"text-align: center\">D3<\/td>\n<td style=\"text-align: center\">last week (8,429)<\/td>\n<td style=\"text-align: center\">240 \/ 1491<\/td>\n<td style=\"text-align: center\">10<\/td>\n<td style=\"text-align: center\">NO<\/td>\n<td><a href=\"https:\/\/formidable.com\/open-source\/victory\/gallery\">Gallery<\/a><\/td>\n<\/tr>\n<tr>\n<td>React-vis<\/td>\n<td style=\"text-align: center\">D3<\/td>\n<td style=\"text-align: center\">1 month ago (891)<\/td>\n<td style=\"text-align: center\">306 \/ 511<\/td>\n<td style=\"text-align: center\">10<\/td>\n<td style=\"text-align: center\">Yes<\/td>\n<td><a href=\"https:\/\/uber.github.io\/react-vis\/examples\/showcases\/plots\">Gallery<\/a><\/td>\n<\/tr>\n<tr>\n<td>React-chartjs-2<\/td>\n<td style=\"text-align: center\">Chart.js<\/td>\n<td style=\"text-align: center\">4 months ago (544)<\/td>\n<td style=\"text-align: center\">52 \/ 665<\/td>\n<td style=\"text-align: center\">15<\/td>\n<td style=\"text-align: center\">CodeSandbox<\/td>\n<td><a href=\"https:\/\/react-chartjs-2.js.org\/examples\">Gallery<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Columns:<br \/><strong>Commits<\/strong>: Last commit (total commits)<br \/><strong>Issues<\/strong>: Open Issues \/ Closed Issues<br \/><strong>Charts<\/strong>: Since many libraries offer composable components, the real amount of charts is practically infinite. The amount is an indication of how many are documented! \ud83d\ude03<\/p>\n<p>Data as of 19\/04\/2023.<\/p>\n<h1 id=\"test-data-structure\">Test Data Structure<\/h1>\n<pre><code class=\"language-js\">[\n  { name: \"Bob\", age: 11, },\n  { name: \"Tom\", age: 13, },\n  { name: \"Bruno\", age: 56, },\n  { name: \"Kyoe\", age: 33, },\n  { name: \"Borat\", age: 333, },\n  { name: \"Sasha\", age: 68, },\n  { name: \"Onur\", age: 27 }\n]\n<\/code><\/pre>\n<h1 id=\"installation-and-usage\">Installation and Usage<\/h1>\n<p>How \u201ceasy\u201d is to get a <strong>Line Chart<\/strong> working for each library?<\/p>\n<p>Check out the <a href=\"https:\/\/github.com\/itenium-be\/React-Charting\">Github source<\/a> for working examples of these!<\/p>\n<h2 id=\"recharts\">Recharts<\/h2>\n<p>Time: 15 minutes.<\/p>\n<p><strong>A smooth experience<\/strong>. Lots of stuff out-of-the-box with little or no configuration (ex: tooltip and legend).<\/p>\n<h4 id=\"example\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-rechart.png\" alt=\"Rechart line chart\" title=\"Recharts: Line Chart\" \/><\/p>\n<h4 id=\"code\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save recharts\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { useSelector } from \"react-redux\";\nimport { CartesianGrid, Legend, Line, LineChart, Tooltip, XAxis, YAxis } from \"recharts\";\n\nexport function Recharts() {\n  const persons = useSelector(state =&gt; state.persons);\n\n  return (\n    &lt;LineChart\n      width={500}\n      height={300}\n      data={persons}\n      margin={{ top: 5, right: 30, left: 20, bottom: 5 }}\n    &gt;\n      &lt;CartesianGrid strokeDasharray=\"3 3\" \/&gt;\n      &lt;XAxis dataKey=\"name\" \/&gt;\n      &lt;YAxis \/&gt;\n      &lt;Tooltip \/&gt;\n      &lt;Legend \/&gt;\n      &lt;Line type=\"monotone\" dataKey=\"age\" stroke=\"#8884d8\" \/&gt;\n    &lt;\/LineChart&gt;\n  );\n}\n<\/code><\/pre>\n<h2 id=\"visx\">Visx<\/h2>\n<p>Time: 29 minutes<\/p>\n<p>The x and y axis configuration was done in a bit of a roundabout way, but the main problem and what took the longest time to set correctly was the tooltip. For some reason the library makes the tooltip data object use properties that have no relevance to the data being inserted in the chart. It assumes all data inserted are datum objects whereas in this case they are person objects. The documentation also neglects to mention this in their example.<\/p>\n<h4 id=\"example-1\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-visx.png\" alt=\"Visx line chart\" title=\"Visx: Line Chart\" \/><\/p>\n<h4 id=\"code-1\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save @visx\/xychart\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { Axis, Grid, LineSeries, Tooltip, XYChart } from \"@visx\/xychart\";\nimport { useSelector } from \"react-redux\";\n\nexport function Visx() {\n  const persons = useSelector(state =&gt; state.persons);\n\n  const accessors = {\n    xAccessor: (d ?: IPerson) =&gt; d &amp;&amp; d.name,\n    yAccessor: (d ?: IPerson) =&gt; d &amp;&amp; d.age,\n  };\n\n  return (\n    &lt;XYChart\n      width={500}\n      height={300}\n      xScale={{ type: \"band\" }}\n      yScale={{ type: \"linear\" }}\n    &gt;\n      &lt;Axis orientation=\"bottom\" \/&gt;\n      &lt;Axis orientation=\"left\" \/&gt;\n      &lt;Grid columns={false} numTicks={4} \/&gt;\n      &lt;LineSeries dataKey=\"Line 1\" data={persons} {...accessors} \/&gt;\n      &lt;Tooltip\n        snapTooltipToDatumX\n        snapTooltipToDatumY\n        showVerticalCrosshair\n        showSeriesGlyphs\n        renderTooltip={({ tooltipData, colorScale }) =&gt; (\n          &lt;div&gt;\n            &lt;div style={{ color: colorScale?.(tooltipData?.nearestDatum?.key!) }}&gt;\n              {tooltipData?.nearestDatum?.key}\n            &lt;\/div&gt;\n            {accessors.xAccessor(tooltipData?.nearestDatum?.datum)}\n            {\", \"}\n            {accessors.yAccessor(tooltipData?.nearestDatum?.datum)}\n          &lt;\/div&gt;\n        )}\n      \/&gt;\n    &lt;\/XYChart&gt;\n  )\n}\n<\/code><\/pre>\n<h2 id=\"nivo\">Nivo<\/h2>\n<p>Time: 29 minutes<\/p>\n<p>My main gripe and time sink with this package was the issue that the data properties needed to be called x and y respectively, so I needed to map my dataset to fit this mold. A simple setting for setting what properties you want to use on which axis would have been nice. Big visual issue however as you can probably tell is that the values don\u2019t exactly show correctly on the x axis.<\/p>\n<h4 id=\"example-2\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-nivo.png\" alt=\"Nivo line chart\" title=\"Nivo: Line Chart\" \/><\/p>\n<h4 id=\"code-2\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save @nivo\/core @nivo\/line\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { Line } from \"@nivo\/line\";\nimport { useSelector } from \"react-redux\";\n\nexport function Nivo() {\n  const persons = useSelector(state =&gt; state.persons);\n  const data = persons.map(p =&gt; ({ x: p.name, y: p.age }));\n\n  return (\n    &lt;Line\n      width={500}\n      height={300}\n      curve=\"monotoneX\"\n      margin={{ top: 20, right: 20, bottom: 60, left: 80 }}\n      enableSlices=\"x\"\n      data={[{ id: \"persons\", data: data }]}\n      xScale={{ type: \"band\" }}\n      yScale={{ type: \"linear\" }}\n      axisLeft={{ legend: \"linear scale\", legendOffset: 12 }}\n      axisBottom={{ legend: \"linear scale\", legendOffset: -12 }}\n    \/&gt;\n  );\n}\n<\/code><\/pre>\n<h2 id=\"victory\">Victory<\/h2>\n<p>Time: 11 minutes<\/p>\n<p>Usage was relatively easy, but it has the same limitation as the Nivo library because you also need to map your data properties to x and y. Also visually it doesn\u2019t look as pleasing as some of the other charts in this list.<\/p>\n<h4 id=\"example-3\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-victory.png\" alt=\"Victory line chart\" title=\"Victory: Line Chart\" \/><\/p>\n<h4 id=\"code-3\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save victory\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { useSelector } from \"react-redux\";\nimport { VictoryChart, VictoryContainer, VictoryLine } from \"victory\";\n\nexport function Victory() {\n  const persons = useSelector(state =&gt; state.persons);\n  const data = persons.map(p =&gt; ({ x: p.name, y: p.age }));\n\n  return (\n    &lt;&gt;\n      &lt;VictoryChart\n        height={300}\n        width={500}\n        containerComponent={&lt;VictoryContainer responsive={false} \/&gt;}\n      &gt;\n        &lt;VictoryLine data={data} \/&gt;\n      &lt;\/VictoryChart&gt;\n    &lt;\/&gt;\n  );\n}\n<\/code><\/pre>\n<h2 id=\"react-vis\">React-vis<\/h2>\n<p>Time: 35 minutes<\/p>\n<p>I could not get this chart to render remotely well. The documentation did not really help either in this case. Also I needed to map the data properties to x and y as well again.<\/p>\n<h4 id=\"example-4\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-react-vis.png\" alt=\"React-vis line chart\" title=\"React-vis: Line Chart\" \/><\/p>\n<h4 id=\"code-4\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save react-vis\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { useSelector } from \"react-redux\";\nimport { XYPlot, XAxis, YAxis, HorizontalGridLines, LineSeries } from \"react-vis\";\n\nexport function ReactVis() {\n  const persons = useSelector(state =&gt; state.persons);\n  const data = persons.map(p =&gt; ({ x: p.name, y: p.age }));\n\n  return (\n    &lt;XYPlot width={500} height={300} xType=\"ordinal\"&gt;\n      &lt;HorizontalGridLines \/&gt;\n      &lt;XAxis \/&gt;\n      &lt;YAxis \/&gt;\n      &lt;LineSeries color='red' data={data} \/&gt;\n    &lt;\/XYPlot&gt;\n  );\n}\n<\/code><\/pre>\n<h2 id=\"react-chartjs-2\">React-chartjs-2<\/h2>\n<p>Time: 35 minutes<\/p>\n<p>Documentation for this library was kind of limited, especially when it came to creating a line chart. An annoying trait is that you have to split your dataset up in into a labels array for the x axis and data array for the y axis. The end result does look nice however.<\/p>\n<h4 id=\"example-5\">Example<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-react-chartjs-2.png\" alt=\"React-chartjs-2 line chart\" title=\"React-chartjs-2: Line Chart\" \/><\/p>\n<h4 id=\"code-5\">Code<\/h4>\n<pre><code class=\"language-sh\">npm install --save react-chartjs-2 chart.js\n<\/code><\/pre>\n<pre><code class=\"language-jsx\">import { useSelector } from \"react-redux\";\nimport { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend } from \"chart.js\";\nimport { Line } from \"react-chartjs-2\";\n\nChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend);\n\nconst options = {\n  responsive: false,\n  plugins: {\n    legend: {\n      position: \"top\" as const,\n    },\n    title: {\n      display: true,\n      text: \"Chart.js Line Chart\",\n    },\n  },\n};\n\nexport function ReactChartJS2() {\n  const persons = useSelector(state =&gt; state.persons);\n  const labels: string[] = persons.map(person =&gt; person.name);\n  const ages: number[] = persons.map(person =&gt; person.age);\n  const data = {\n    labels,\n    datasets: [{\n      label: \"Dataset 1\",\n      data: ages,\n      borderColor: \"rgb(255, 99, 132)\",\n      backgroundColor: \"rgba(255, 99, 132, 0.5)\",\n    }],\n  };\n\n  return (\n    &lt;Line width={500} height={300} options={options} data={data} \/&gt;\n  );\n}\n<\/code><\/pre>\n<h1 id=\"conclusion\">Conclusion<\/h1>\n<h2 id=\"onur-recharts\">Onur: Recharts<\/h2>\n<p>First time was a charm, the first library <strong>Recharts<\/strong> did everything I wanted it to in a clear and convenient manner. It\u2019s the only library where I didn\u2019t really have a complaint. It\u2019s easy to use and has very good documentation.<\/p>\n<h2 id=\"wouter-nivo\">Wouter: Nivo<\/h2>\n<p>Disclaimer: I didn\u2019t actually implement the Line Charts.<\/p>\n<p>The out of the box experience of the Line Chart was, for me, really nice for Recharts, <strong>Nivo<\/strong> and React-ChartJS-2.<\/p>\n<p>I was really impressed with the documentation of <strong>Nivo<\/strong>: a <strong>very<\/strong> interactive gallery plus a storybook implementation, just wow. The dev team also seems to be on top of things with 81 open issues and a whopping 1393 closed ones. It\u2019s the only library with a below v1 version though and has not yet gained as much traction (300k weekly downloads) compared to current leaders Recharts (1.5M) and React-chartjs-2 (950k), the latter which coasts of the popularity of <code>Chart.js<\/code> itself.<\/p>\n<h2 id=\"deployed-demo-app\">Deployed Demo App<\/h2>\n<p>The <code>create-react-app<\/code> is <a href=\"https:\/\/itenium.be\/React-Charting\/\">published at itenium.be<\/a>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/react-charting-demo-app.png\" alt=\"Demo App Overview\" title=\"Demo App Overview\" \/><\/p>\n<h1>Extras<\/h1>\n<p><b>Stuff that came into being during the making of this post<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/itenium-be\/React-Charting\">Project with all the examples for the React chart libraries<\/a><\/li>\n<\/ul>\n<h1> Package Versions <i class=\"fa fa-info-circle\" style=\"float: right; color: cornflowerblue; font-size: 28px\" title=\"Package versions used for this post and in the accompanying code on Github\"><\/i><\/h1>\n<div><a href=\"https:\/\/github.com\/recharts\/recharts\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/recharts\/recharts.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/recharts\/recharts\">recharts\/recharts<\/a>: v2.5.0 <\/div>\n<div><a href=\"https:\/\/github.com\/airbnb\/visx\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/airbnb\/visx.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/airbnb\/visx\">airbnb\/visx<\/a>: v3.1.2 <\/div>\n<div><a href=\"https:\/\/github.com\/plouc\/nivo\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/plouc\/nivo.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/plouc\/nivo\">plouc\/nivo<\/a>: v0.80.0 <\/div>\n<div><a href=\"https:\/\/github.com\/FormidableLabs\/victory\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/FormidableLabs\/victory.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/FormidableLabs\/victory\">FormidableLabs\/victory<\/a>: v36.6.0 <\/div>\n<div><a href=\"https:\/\/github.com\/uber\/react-vis\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/uber\/react-vis.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/uber\/react-vis\">uber\/react-vis<\/a>: v1.11.7 <\/div>\n<div><a href=\"https:\/\/github.com\/reactchartjs\/react-chartjs-2\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/reactchartjs\/react-chartjs-2.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/reactchartjs\/react-chartjs-2\">reactchartjs\/react-chartjs-2<\/a>: v5.2.0 <\/div>\n","protected":false},"excerpt":{"rendered":"<p>The question \u201cWhat chart library to use in React?\u201d came about when I had to actually find one to introduce in a project. As suggested by a colleague, I created this blog post with the results of my research, maybe saving others from having to do the same.<\/p>\n","protected":false},"author":1,"featured_media":2035,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[3],"tags":[22],"class_list":["post-1499","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-react"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What chart library to use in React? - Itenium<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What chart library to use in React? - Itenium\" \/>\n<meta property=\"og:description\" content=\"The question \u201cWhat chart library to use in React?\u201d came about when I had to actually find one to introduce in a project. As suggested by a colleague, I created this blog post with the results of my research, maybe saving others from having to do the same.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/\" \/>\n<meta property=\"og:site_name\" content=\"Itenium\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-16T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T12:31:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png\" \/>\n\t<meta property=\"og:image:width\" content=\"360\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Usdevelop\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Usdevelop\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/\",\"name\":\"What chart library to use in React? - Itenium\",\"isPartOf\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png\",\"datePublished\":\"2023-05-16T22:00:00+00:00\",\"dateModified\":\"2025-11-28T12:31:43+00:00\",\"author\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\"},\"breadcrumb\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png\",\"contentUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png\",\"width\":360,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/demo.sidekick.be\/itenium\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What chart library to use in React?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/\",\"name\":\"Itenium\",\"description\":\"We build software. We build careers.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\",\"name\":\"Usdevelop\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"caption\":\"Usdevelop\"},\"sameAs\":[\"https:\/\/demo.sidekick.be\/itenium\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What chart library to use in React? - Itenium","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"What chart library to use in React? - Itenium","og_description":"The question \u201cWhat chart library to use in React?\u201d came about when I had to actually find one to introduce in a project. As suggested by a colleague, I created this blog post with the results of my research, maybe saving others from having to do the same.","og_url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/","og_site_name":"Itenium","article_published_time":"2023-05-16T22:00:00+00:00","article_modified_time":"2025-11-28T12:31:43+00:00","og_image":[{"width":360,"height":300,"url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png","type":"image\/png"}],"author":"Usdevelop","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Usdevelop","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/","url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/","name":"What chart library to use in React? - Itenium","isPartOf":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#website"},"primaryImageOfPage":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage"},"image":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage"},"thumbnailUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png","datePublished":"2023-05-16T22:00:00+00:00","dateModified":"2025-11-28T12:31:43+00:00","author":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022"},"breadcrumb":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#primaryimage","url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png","contentUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/react-charting-chart.png","width":360,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/what-chart-library-to-use-in-react\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/demo.sidekick.be\/itenium\/"},{"@type":"ListItem","position":2,"name":"What chart library to use in React?"}]},{"@type":"WebSite","@id":"https:\/\/demo.sidekick.be\/itenium\/#website","url":"https:\/\/demo.sidekick.be\/itenium\/","name":"Itenium","description":"We build software. We build careers.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022","name":"Usdevelop","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","caption":"Usdevelop"},"sameAs":["https:\/\/demo.sidekick.be\/itenium"]}]}},"_links":{"self":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/comments?post=1499"}],"version-history":[{"count":3,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1499\/revisions"}],"predecessor-version":[{"id":2277,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1499\/revisions\/2277"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media\/2035"}],"wp:attachment":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media?parent=1499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/categories?post=1499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/tags?post=1499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}