Logarithmic axis in React Chart component
19 Sep 202424 minutes to read
Logarithmic axis uses logarithmic scale and it is very useful in visualizing data, when it has numeric values in both lower order of magnitude (eg: 10-6) and higher order of magnitude (eg: 106).
To get start quickly with React Logarithmic Axis, you can check out this video:
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, LineSeries } from '@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis = { valueType: 'Logarithmic', title: 'Profit' };
return <ChartComponent id='charts' primaryXAxis={primaryxAxis} primaryYAxis={primaryyAxis} title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]}/>
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { AxisModel, ChartComponent, SeriesCollectionDirective, AxesDirective, AxisDirective, SeriesDirective, Inject,
ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, Zoom, Crosshair, LineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis: AxisModel = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis: AxisModel = { valueType: 'Logarithmic', title: 'Profit' };
return <ChartComponent id='charts'
primaryXAxis={primaryxAxis}
primaryYAxis={primaryyAxis}
title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]} />
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>
};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let logData = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
export let logData: Object[] = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
Note: To use log axis, we need to inject
Logarithmic
module into theservices
and
set thevalueType
of axis toLogarithmic
.
Range
Range of an axis, will be calculated automatically based on the provided data, you can also customize the range of the axis using minimum
, maximum
and interval
property of the axis.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, LineSeries } from '@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000 };
return <ChartComponent id='charts' primaryXAxis={primaryxAxis} primaryYAxis={primaryyAxis} title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]}/>
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { AxisModel, ChartComponent, SeriesCollectionDirective, AxesDirective, AxisDirective, SeriesDirective, Inject,
ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, Zoom, Crosshair, LineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis: AxisModel = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis: AxisModel = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000 };
return <ChartComponent id='charts'
primaryXAxis={primaryxAxis}
primaryYAxis={primaryyAxis}
title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]} />
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>
};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let logData = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
export let logData: Object[] = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
Logarithmic Base
Logarithmic base can be customized by using the logBase
property of the axis.For example when the logBase is 5, the axis values follows 5-2, 5-1, 50,51, 52 etc.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, LineSeries } from '@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000, logBase: 2 };
return <ChartComponent id='charts' primaryXAxis={primaryxAxis} primaryYAxis={primaryyAxis} title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]}/>
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { AxisModel, ChartComponent, SeriesCollectionDirective, AxesDirective, AxisDirective, SeriesDirective, Inject,
ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, Zoom, Crosshair, LineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis: AxisModel = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis: AxisModel = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000, logBase: 2 };
return <ChartComponent id='charts'
primaryXAxis={primaryxAxis}
primaryYAxis={primaryyAxis}
title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]} />
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>
};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let logData = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
export let logData: Object[] = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
Logarithmic Interval
Logarithmic axis interval can be customized by using the interval
property of the axis. When the logarithmic base is 10 and logarithmic interval is 2, then the axis labels are placed at an interval of 102. The default value of the interval is 1.
import * as React from "react";
import * as ReactDOM from "react-dom";
import { ChartComponent, SeriesCollectionDirective, SeriesDirective, Inject, ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, LineSeries } from '@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000, interval: 2 };
return <ChartComponent id='charts' primaryXAxis={primaryxAxis} primaryYAxis={primaryyAxis} title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]}/>
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>;
}
;
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
import * as React from "react";
import * as ReactDOM from "react-dom";
import { AxisModel, ChartComponent, SeriesCollectionDirective, AxesDirective, AxisDirective, SeriesDirective, Inject,
ColumnSeries, Legend, DateTime, Logarithmic, Tooltip, DataLabel, Zoom, Crosshair, LineSeries, Selection}
from'@syncfusion/ej2-react-charts';
import { logData } from './datasource';
function App() {
const primaryxAxis: AxisModel = { valueType: 'DateTime', title: 'Years', labelFormat: 'y' };
const primaryyAxis: AxisModel = { valueType: 'Logarithmic', title: 'Profit', minimum: 100, maximum: 10000, interval: 2 };
return <ChartComponent id='charts'
primaryXAxis={primaryxAxis}
primaryYAxis={primaryyAxis}
title='Product X Growth [1995-2005]'>
<Inject services={[ColumnSeries, Legend, Tooltip, DataLabel, Logarithmic, LineSeries, DateTime]} />
<SeriesCollectionDirective>
<SeriesDirective dataSource={logData} xName='x' yName='y' name='Product X' type='Line'>
</SeriesDirective>
</SeriesCollectionDirective>
</ChartComponent>
};
export default App;
ReactDOM.render(<App />, document.getElementById("charts"));
export let logData = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];
export let logData: Object[] = [
{ x: new Date(1995, 0, 1), y: 80 },
{ x: new Date(1996, 0, 1), y: 200 },
{ x: new Date(1997, 0, 1), y: 400 },
{ x: new Date(1998, 0, 1), y: 600 },
{ x: new Date(1999, 0, 1), y: 700 },
{ x: new Date(2000, 0, 1), y: 1400 },
{ x: new Date(2001, 0, 1), y: 2000 },
{ x: new Date(2002, 0, 1), y: 4000 },
{ x: new Date(2003, 0, 1), y: 6000 },
{ x: new Date(2004, 0, 1), y: 8000 },
{ x: new Date(2005, 0, 1), y: 11000 }
];