diffract

A set of D3 based React components with emphasis on animations

Github Download diffract v0.3.1

Pure React

The entire codebase is written using idiomatic React patterns. All components provide consistent, intuitive APIs

Elegant Animations

Smooth, visually pleasing animations are one of the key goals of this project. Every data update is accompanied by animation.

Built-in Styling

This project embraces inline styling. This means you only require the Javascript modules without having to worry about including LESS or SASS files.

Getting started

diffract is available via npm and can be used with browserify or webpack.

  npm install --save diffract

Samples

Pies & Donuts


import React, {Component} from 'react';
import ReactDom from 'react-dom';
import {Chart, DataSeries, Pie} from 'diffract';

const DonutDemo = () => (
  <Chart width={width} height={height}>
      <DataSeries data={this.state.values}>
          <Pie innerRadius={75} outerRadius={110}
              onClick={(e, v, i) => console.log(this.state.labels[i] + ' clicked')}
              style={(d, i) => ({fill: this.getColors(i)})}>
              <text className="donut-title" textAnchor="middle"
                  x={0} y={0} fontSize={18}>
                  {'Hello'}
              </text>
              <text className="donut-subtitle" textAnchor="middle"
                  x={0} y={18} fontSize={10}>
                  {'diffract'}
              </text>
          </Pie>
      </DataSeries>
  </Chart>
);
React.render(
  <DonutDemo/>;,
  document.getElementById( 'donutDemo' )
);
Hellodiffract

Simple Bar Charts


import React, {Component} from 'react';
import ReactDom from 'react-dom';
import {
    util, Chart, DataSeries, BarChart, XAxis, YAxis
} from 'diffract';

const BarGraphDemo = () => (
  <Chart width={width} height={height}
      margin={margins}>
      <DataSeries data={this.state.values}
          xScale={xScale} yScale={yScale}>
          <BarChart onClick={(e, v, i) => console.log(this.state.labels[i] + ' clicked')}
              style={(d, i) => ({fill: this.getColors(i)})}/>
          <XAxis textRotation={30} tickFormat={(d, i) => this.state.labels[i]} debug/>
          <YAxis
              tickFormat={d => {
                  return d;
              }}/>
      </DataSeries>
  </Chart>
);
React.render(
  <BarGraphDemo/>;,
  document.getElementById( 'barGraphDemo' )
);
ElvesDwarvesHobbitsesMenWizards010002000300040005000600070008000

Stacked Bar Charts


import React, {Component} from 'react';
import ReactDom from 'react-dom';
import {
    util, Chart, DataSeries, BarChart, XAxis, YAxis, Stack
} from 'diffract';

const StackedBarGraphDemo = () => (
  <Chart width={width} height={height}
      margin={margins}>
      <DataSeries data={this.state.multiValues}
          xScale={xScale} yScale={yScale}>
          <Stack>
              <BarChart style={(d, i) => ({fill: this.getColors(i)})}/>
              <XAxis tickFormat={(d, i) => this.state.labels[i]}/>
              <YAxis
                  tickFormat={d => {
                      return d;
                  }}/>
          </Stack>
      </DataSeries>
  </Chart>
);

React.render(
  <StackedBarGraphDemo/>,
  document.getElementById( 'stackedBarGraphDemo' )
);
ElvesDwarvesHobbitsesMenWizards050001000015000200002500030000

Grouped Bar Charts


import React, {Component} from 'react';
import ReactDom from 'react-dom';
import {
    util, Chart, DataSeries, BarChart, XAxis, YAxis, Group
} from 'diffract';

const GroupedBarGraphDemo = () => (
  <Chart width={width} height={height} data={this.state.multiValues}
      xScale={xScale} yScale={yScale}
      margin={margins}>
      <DataSeries data={this.state.multiValues}
          xScale={xScale} yScale={yScale}>
          <Group>
              <BarChart style={(d, i) => ({fill: this.getColors(i)})}/>
              <XAxis tickFormat={(d, i) => this.state.labels[i]}/>
              <YAxis
                  tickFormat={d => {
                      return d;
                  }}/>
          </Group>
      </DataSeries>
  </Chart>
);


React.render(
  <GroupedBarGraphDemo/>,
  document.getElementById( 'groupedBarGraphDemo' )
);
ElvesDwarvesHobbitsesMenWizards0100020003000400050006000700080009000