Convert Figma logo to code with AI

esbullington logoreact-d3

Modular React charts made with d3.js

1,757
187
1,757
14

Top Related Projects

23,884

Redefined chart library built with React and D3

13,142

nivo provides a rich set of dataviz components, built on top of the awesome d3 and React libraries

10,987

A collection of composable React components for building interactive data visualizations

Data Visualization Components

React components for Chart.js, the most popular charting library

Beautiful and expressive Sparklines React component

Quick Overview

The react-d3 library is a set of React components that provide a high-level interface for creating data visualizations using the D3.js library. It aims to make it easier to integrate D3.js into a React-based application by abstracting away the low-level D3.js API and providing a more declarative, React-friendly way of creating charts and graphs.

Pros

  • Abstraction of D3.js API: The library provides a higher-level API that simplifies the process of creating data visualizations with D3.js, making it more accessible to developers who are not familiar with the intricacies of the D3.js library.
  • Reactive and Declarative: The library's components are designed to work well with React's reactive and declarative nature, making it easier to manage the state and updates of the visualizations.
  • Wide Range of Visualizations: The library includes a variety of pre-built components for common data visualization types, such as line charts, bar charts, scatter plots, and more.
  • Customization and Extensibility: The library allows for a high degree of customization, and developers can extend the existing components or create their own custom visualizations.

Cons

  • Dependency on D3.js: The library is built on top of D3.js, which means that developers need to have some understanding of D3.js in order to use the library effectively.
  • Limited Documentation: The project's documentation could be more comprehensive, which may make it challenging for new users to get started with the library.
  • Potential Performance Issues: Depending on the complexity of the visualizations and the amount of data being rendered, the library may experience performance issues, especially on larger datasets.
  • Lack of Active Maintenance: The project appears to have a relatively low level of active maintenance, with the last commit being over a year ago. This may raise concerns about the long-term viability and support for the library.

Code Examples

Here are a few examples of how to use the react-d3 library:

  1. Line Chart:
import React from 'react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'react-d3';

const data = [
  { name: 'Jan', value: 400 },
  { name: 'Feb', value: 300 },
  { name: 'Mar', value: 500 },
  { name: 'Apr', value: 600 },
  { name: 'May', value: 400 },
  { name: 'Jun', value: 500 },
];

const LineChartExample = () => {
  return (
    <LineChart width={600} height={400} data={data}>
      <XAxis dataKey="name" />
      <YAxis />
      <CartesianGrid strokeDasharray="3 3" />
      <Tooltip />
      <Legend />
      <Line type="monotone" dataKey="value" stroke="#8884d8" />
    </LineChart>
  );
};

export default LineChartExample;
  1. Bar Chart:
import React from 'react';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'react-d3';

const data = [
  { name: 'Jan', value: 400 },
  { name: 'Feb', value: 300 },
  { name: 'Mar', value: 500 },
  { name: 'Apr', value: 600 },
  { name: 'May', value: 400 },
  { name: 'Jun', value: 500 },
];

const BarChartExample = () => {
  return (
    <BarChart width={600} height={400} data={data}>
      <XAxis dataKey="name" />
      <YAxis />
      <CartesianGrid strokeDasharray="3 3" />
      <Tooltip />
      <Legend />
      <Bar dataKey="value" fill="#8884d8" />
    </BarChart>
  );
};

export default BarChartExample;
  1. **Scatter Plot

Competitor Comparisons

23,884

Redefined chart library built with React and D3

Pros of Recharts

  • More active development and maintenance
  • Larger community and better documentation
  • Easier to customize and extend

Cons of Recharts

  • Slightly larger bundle size
  • Less flexibility for complex, custom visualizations
  • Steeper learning curve for advanced usage

Code Comparison

Recharts:

import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';

<LineChart width={600} height={300} data={data}>
  <Line type="monotone" dataKey="uv" stroke="#8884d8" />
  <CartesianGrid stroke="#ccc" />
  <XAxis dataKey="name" />
  <YAxis />
</LineChart>

React-d3:

import { LineChart } from 'react-d3-components';

<LineChart
  data={data}
  width={600}
  height={300}
  margin={{top: 10, bottom: 50, left: 50, right: 10}}
/>

Recharts offers a more declarative API with individual components for chart elements, while React-d3 provides a more compact syntax. Recharts generally requires less boilerplate code for basic charts, but React-d3 may be more suitable for highly customized visualizations.

13,142

nivo provides a rich set of dataviz components, built on top of the awesome d3 and React libraries

Pros of nivo

  • More comprehensive and feature-rich library with a wider range of chart types
  • Better documentation and examples, making it easier to get started and implement
  • Active development and maintenance, with regular updates and improvements

Cons of nivo

  • Larger bundle size due to its extensive feature set
  • Steeper learning curve for beginners due to its more complex API
  • Less flexibility for custom implementations compared to react-d3

Code Comparison

nivo example:

import { ResponsivePie } from '@nivo/pie'

const MyPieChart = ({ data }) => (
  <ResponsivePie
    data={data}
    margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
    innerRadius={0.5}
    padAngle={0.7}
    cornerRadius={3}
  />
)

react-d3 example:

import { PieChart } from 'react-d3-components'

const MyPieChart = ({ data }) => (
  <PieChart
    data={data}
    width={400}
    height={400}
    margin={{top: 10, bottom: 10, left: 100, right: 100}}
  />
)

Both libraries provide React components for creating charts, but nivo offers a more declarative API with more built-in customization options, while react-d3 provides a simpler interface that may require more manual customization for advanced features.

10,987

A collection of composable React components for building interactive data visualizations

Pros of Victory

  • More comprehensive and feature-rich charting library
  • Better documentation and examples
  • Actively maintained with regular updates

Cons of Victory

  • Steeper learning curve due to more complex API
  • Larger bundle size, which may impact performance

Code Comparison

react-d3:

import { BarChart } from 'react-d3-components';

<BarChart
  data={[{
    label: 'somethingA',
    values: [{x: 'SomethingA', y: 10}, {x: 'SomethingB', y: 4}, {x: 'SomethingC', y: 3}]
  }]}
  width={400}
  height={400}
  margin={{top: 10, bottom: 50, left: 50, right: 10}}
/>

Victory:

import { VictoryBar, VictoryChart, VictoryAxis } from 'victory';

<VictoryChart domainPadding={20}>
  <VictoryAxis tickValues={[1, 2, 3]} tickFormat={["A", "B", "C"]} />
  <VictoryAxis dependentAxis />
  <VictoryBar
    data={[{x: 1, y: 10}, {x: 2, y: 4}, {x: 3, y: 3}]}
  />
</VictoryChart>

Victory offers more customization options and a more declarative approach, while react-d3 provides a simpler API for basic charts. Victory's modular structure allows for more complex compositions, but may require more code for simple use cases.

Data Visualization Components

Pros of react-vis

  • More comprehensive and feature-rich library with a wider range of chart types
  • Better documentation and examples, making it easier for developers to get started
  • Actively maintained by Uber, with regular updates and improvements

Cons of react-vis

  • Larger bundle size, which may impact performance for smaller projects
  • Steeper learning curve due to its extensive API and configuration options
  • Less flexibility for custom visualizations compared to react-d3

Code Comparison

react-vis:

import {XYPlot, LineSeries} from 'react-vis';

<XYPlot width={300} height={300}>
  <LineSeries data={[{x: 1, y: 10}, {x: 2, y: 5}, {x: 3, y: 15}]} />
</XYPlot>

react-d3:

import {LineChart} from 'react-d3-components';

<LineChart
  data={[{values: [{x: 1, y: 10}, {x: 2, y: 5}, {x: 3, y: 15}]}]}
  width={300}
  height={300}
/>

Both libraries provide React components for creating charts, but react-vis offers a more modular approach with separate components for the plot and series. react-d3 tends to have more all-in-one components for specific chart types. react-vis generally requires more configuration but offers greater customization potential.

React components for Chart.js, the most popular charting library

Pros of react-chartjs-2

  • Easier to use and integrate with React applications
  • More extensive documentation and community support
  • Regular updates and maintenance

Cons of react-chartjs-2

  • Less flexibility for custom visualizations
  • Limited to Chart.js chart types
  • Potentially slower performance for large datasets

Code Comparison

react-chartjs-2:

import { Line } from 'react-chartjs-2';

const LineChart = () => (
  <Line data={chartData} options={chartOptions} />
);

react-d3:

import { LineChart } from 'react-d3-components';

const Chart = () => (
  <LineChart data={data} width={400} height={200} margin={{top: 10, bottom: 50, left: 50, right: 10}} />
);

react-chartjs-2 provides a more straightforward implementation, while react-d3 offers more granular control over chart properties. react-chartjs-2 abstracts away much of the complexity, making it easier for developers to quickly create charts. However, react-d3 allows for more customization and fine-tuning of chart elements, which can be beneficial for complex visualizations or specific design requirements.

Beautiful and expressive Sparklines React component

Pros of react-sparklines

  • Lightweight and focused specifically on sparkline charts
  • Easy to use with minimal configuration required
  • Supports responsive design out of the box

Cons of react-sparklines

  • Limited to sparkline charts only, not suitable for complex visualizations
  • Fewer customization options compared to react-d3
  • Less active development and community support

Code Comparison

react-sparklines:

import { Sparklines, SparklinesLine } from 'react-sparklines';

<Sparklines data={[5, 10, 5, 20]}>
  <SparklinesLine color="blue" />
</Sparklines>

react-d3:

import { BarChart } from 'react-d3';

<BarChart
  data={[{x: 'A', y: 5}, {x: 'B', y: 10}, {x: 'C', y: 5}, {x: 'D', y: 20}]}
  width={400}
  height={200}
  margin={{top: 10, bottom: 50, left: 50, right: 10}}
/>

The code comparison shows that react-sparklines is more concise for simple sparkline charts, while react-d3 offers more flexibility for various chart types with additional configuration options.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Update

Important update:

The actively maintained fork of this project is now at the Github of react-d3 co-creator yang-wei, who has recently taken the lead in maintaining the project and moving toward 1.0.

Yang Wei's fork is located here.

react-d3

Modular ReactJS charts made using d3 chart utilities. Work on project documentation has started here. A few examples of the available charts can be seen below, the others can be viewed here, side-by-side with the React code that generates the charts.

react-d3 chart images

Build Status

Version

npm version

Basic usage

First, install via npm:

npm install react-d3

Then, import into your ReactJS project:

var rd3 = require('react-d3');
// es6
import rd3 from 'react-d3';

The charts are then available under the rd3 namespace, which you can then use as shown on the demonstration page:

If you don't wish to pull in all the charts, you can also require single chart:

var BarChart = require('react-d3/barchart').BarChart;
// es6
import { BarChart } from 'react-d3';

Available Charts

var BarChart = rd3.BarChart;
var LineChart = rd3.LineChart;
var PieChart = rd3.PieChart;
var AreaChart = rd3.AreaChart;
var Treemap = rd3.Treemap;
var ScatterChart = rd3.ScatterChart;
var CandleStickChart = rd3.CandleStickChart;

For usage, please see here. API documentation is also coming online over the coming days.

JSFiddle

There's a development build available for experimentation on JSFiddle: http://jsfiddle.net/esbullington/jp9dkh1g/.

Please note that this build should probably not be used in production, since it bundles all of react-d3's dependencies in a single bundle (this is also the cause of the "Cannot read property 'firstChild' of undefined" error message on the JS console, which occurs when there are two React libraries in the same namespace).

All the react-d3 charts are available in this JSFiddle fork under the global rd3 namespace.

Background

Although there have been several different approaches proposed for combining the power of d3 with the flexibility and modularity of ReactJS, the approach I'm using here was inspired by this blog post by Ben Smith of Binary Consulting.

With this approach, React itself is responsible for generating the SVG markup. d3.js is used for its tremendous collection of utility functions, such as those that calculate the path value for various chart types.

Roadmap

For current roadmap, please see Yang Wei's fork at: https://github.com/yang-wei/rd3

License

MIT

Copyright (c) 2014-2015 Eric. S Bullington, Lim Yang Wei, and project contributors

NPM DownloadsLast 30 Days