This section provides an overview of the chart types available in Integrated Charts.
Column / Bar Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "groupedColumn",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Pie / Donut Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const chartConfig: Record<"pie" | "donut", { chartColumns: string[] }> = {
pie: {
chartColumns: ["period", "individual"],
},
donut: {
chartColumns: ["period", "recurring", "individual"],
},
};
const gridOptions: GridOptions = {
columnDefs: [
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
const chartType = "pie";
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
chartType,
cellRange: {
rowStartIndex: 0,
rowEndIndex: 3,
columns: chartConfig[chartType].chartColumns,
},
})!;
}
function updateChart(chartType: "pie" | "donut") {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType,
cellRange: {
rowStartIndex: 0,
rowEndIndex: 3,
columns: chartConfig[chartType].chartColumns,
},
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Line / Area Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "line",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Scatter / Bubble Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{ field: "division", width: 150, chartDataType: "category" },
{ field: "resource", width: 150, chartDataType: "category" },
{ field: "revenue", chartDataType: "series" },
{ field: "expenses", chartDataType: "series" },
{ field: "headcount", chartDataType: "series" },
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["resource", "revenue", "expenses", "headcount"],
},
chartType: "scatter",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Polar Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{ field: "division", chartDataType: "category", width: 150 },
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["division", "recurring", "individual"],
},
chartType: "radarLine",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Statistical Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{ field: "client", chartDataType: "category", headerName: "Client name" },
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "client", "recurring", "individual"],
},
chartType: "boxPlot",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Hierarchical Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{ field: "division", width: 150, chartDataType: "category" },
{ field: "resource", width: 150, chartDataType: "category" },
{ field: "revenue", chartDataType: "series" },
{ field: "expenses", chartDataType: "series" },
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["division", "resource", "revenue", "expenses"],
},
chartType: "treemap",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Specialized Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ClientSideRowModelModule,
ColDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const heatmapColIds: string[] = [
"year",
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec",
];
const heatmapColDefs: ColDef[] = [
{ field: "year", width: 150, chartDataType: "category" },
{ field: "jan" },
{ field: "feb" },
{ field: "mar" },
{ field: "apr" },
{ field: "may" },
{ field: "jun" },
{ field: "jul" },
{ field: "aug" },
{ field: "sep" },
{ field: "oct" },
{ field: "nov" },
{ field: "dec" },
];
const waterfallColIds: string[] = ["financials", "amount"];
const waterfallColDefs: ColDef[] = [
{ field: "financials", width: 150, chartDataType: "category" },
{ field: "amount", chartDataType: "series" },
];
const gridOptions: GridOptions = {
columnDefs: heatmapColDefs,
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData("heatmap").then((rowData) =>
params.api.setGridOption("rowData", rowData),
);
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
chartType: "heatmap",
cellRange: {
columns: heatmapColIds,
},
})!;
}
function updateChart(chartType: "heatmap" | "waterfall") {
getData(chartType).then((rowData) => {
gridApi.updateGridOptions({
columnDefs: chartType === "heatmap" ? heatmapColDefs : waterfallColDefs,
rowData,
});
setTimeout(() => {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: chartRef.chartId,
chartType,
cellRange: {
columns: chartType === "heatmap" ? heatmapColIds : waterfallColIds,
},
});
});
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Funnel Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{
field: "group",
chartDataType: "category",
headerName: "Group",
width: 150,
},
{ field: "count", chartDataType: "series", headerName: "Count" },
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["group", "count"],
},
chartType: "funnel",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details:
Combination Copy Link
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
ChartRef,
ChartType,
ClientSideRowModelModule,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
createGrid,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
ModuleRegistry.registerModules([
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
]);
let gridApi: GridApi;
let chartRef: ChartRef;
const gridOptions: GridOptions = {
columnDefs: [
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
],
defaultColDef: {
flex: 1,
minWidth: 100,
},
popupParent: document.body,
cellSelection: true,
enableCharts: true,
chartToolPanelsDef: {
defaultToolPanel: "settings",
},
onGridReady: (params: GridReadyEvent) => {
getData().then((rowData) => params.api.setGridOption("rowData", rowData));
},
onFirstDataRendered,
};
function onFirstDataRendered(params: FirstDataRenderedEvent) {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "columnLineCombo",
})!;
}
function updateChart(chartType: ChartType) {
gridApi.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
}
const gridDiv = document.querySelector<HTMLElement>("#myGrid")!;
gridApi = createGrid(gridDiv, gridOptions);
if (typeof window !== "undefined") {
// Attach external event handlers to window so they can be called from index.html
(<any>window).updateChart = updateChart;
}
More Details: