A bubble chart
by Christiaan Westerbeek
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://npmcdn.com/[email protected]/dist/react-with-addons.min.js"></script>
<script src="https://npmcdn.com/[email protected]/dist/react-dom.min.js"></script>
<script src="https://npmcdn.com/prop-types/prop-types.min.js"></script>
<script src="https://npmcdn.com/recharts/umd/Recharts.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
CSS
body {
margin: 0;
}
#container {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
width: 800px;
height: 800px;
background-color: #fff;
}
Babel + JSX
const {ScatterChart, Scatter, XAxis, YAxis, ZAxis, CartesianGrid, Tooltip, Legend} = Recharts;
const data01 = [
{ delta_minute: 3, hour: '12a', index: 0, value: 170 },
{ delta_minute: 4, hour: '1a', index: 0, value: 180 },
{ delta_minute: 5, hour: '2a', index: 0, value: 150 },
{ delta_minute: 6, hour: '3a', index: 0, value: 120 },
{ delta_minute: 7, hour: '4a', index: 0, value: 200 },
{ delta_minute: 8, hour: '5a', index: 0, value: 300 },
{ delta_minute: 9, hour: '6a', index: 0, value: 400 },
{ delta_minute: 14, hour: '7a', index: 0, value: 200 },
{ delta_minute: 20, hour: '8a', index: 0, value: 100 },
{ delta_minute: 30, hour: '9a', index: 0, value: 150 },
];
const parseDomain = () => {
return [
0,
Math.max.apply(null, [
...data01.map(entry => entry.value)
])
];
};
const ThreeDimScatterChart = React.createClass({
renderTooltip(props) {
const { active, payload } = props;
if (active && payload && payload.length) {
const data = payload[0].payload;
return (
<div style={{ backgroundColor: '#fff', border: '1px solid #999', margin: 0, padding: 10 }}>
<p>{data.hour}</p>
<p><span>value: </span>{data.value}</p>
</div>
);
}
return null;
},
render () {
const domain = parseDomain();
const range = [16, 225];
return (
<div>
<ScatterChart width={800} height={60} margin={{top: 10, right: 0, bottom: 0, left: 0}}>
<XAxis type="number" dataKey="delta_minute" interval={0} tick={false} stroke="red" strokeWidth="4" />
<YAxis type="number" dataKey="index" name="sunday" height={10} width={80} tick={false} tickLine={false} axisLine={false} label={{ value: 'Sunday', position: 'insideRight' }}/>
<ZAxis type="number" dataKey="value" domain={domain} range={range} />
<Tooltip cursor={{strokeDasharray: '3 3'}} wrapperStyle={{ zIndex: 100 }} content={this.renderTooltip} />
<Scatter data={data01}...