Treemap Chart

A Treemap Chart is a type of chart that visualizes hierarchical data in a nested rectangle structure. The size of each rectangle corresponds to a specific value, with larger rectangles representing larger values.

Treemap Charts are particularly effective for displaying data with multiple levels of categorization, allowing to show relative proportions of different categories and subcategories.

Data Charts support treemap type. To use the Treemap Chart, you can set the data chart type to GC.Spread.Sheets.DataCharts.DataChartType.treemap. For example, you can insert a treemap data chart and configure the data chart by method setChartConfig. Notes: before using the data chart, tables in data manager should be initialized.
window.onload = async () => { const { spread, designer } = createSpreadAndDesigner(); await initDataManager(spread); const dataChart = spread.getActiveSheet().dataCharts.add('treemap', 30, 30, 550, 400, GC.Spread.Sheets.DataCharts.DataChartType.treemap); dataChart.setChartConfig({ tableName: 'Sales', plots: [{ type: GC.Spread.Sheets.DataCharts.DataChartType.treemap, encodings: { values: [{ field: 'Sales', aggregate: GC.Spread.Sheets.DataCharts.Aggregate.sum }], details: [{ field: 'ProductType' }, { field: 'Product' }], tooltip: [{ field: 'ProductType' }, { field: 'Product' }, { field: 'Sales' }], }, config: { tooltip: [{ style: { fill: { type: 'CssColor', color: 'white' }, stroke: { type: 'CssColor', color: '#e0e0e0' }, strokeWidth: 1, }, textStyle: { color: '#555555', fontFamily: 'Calibri', fontSize: 12, }, }], }, }], config: { header: { title: 'Treemap Chart', padding: { left: 16, right: 16, top: 5, bottom: 0, }, textStyle: { fontSize: 19, fontStyle: GC.Spread.Sheets.DataCharts.FontStyle.italic, alignment: GC.Spread.Sheets.DataCharts.HAlign.left, }, }, }, }); spread.getActiveSheet().dataCharts.all()[0].isSelected(true); if (designer) { designer.refresh(); } } function createSpreadAndDesigner() { const demoHost = document.getElementById('demo-host'); if (window !== top) { const spread = new GC.Spread.Sheets.Workbook('spread-host', { sheetCount: 1 }); new GC.Spread.Sheets.DataCharts.DataChartConfigPanel('panel-host', spread); return { spread } } else { const designer = new GC.Spread.Sheets.Designer.Designer(demoHost, undefined, undefined, { sheetCount: 1 }); return { designer, spread: designer.getWorkbook(), } } } async function initDataManager(spread) { const records = [ ['Smartphones', 'iPhone 15', 4200], ['Smartphones', 'Galaxy', 3100], ['Smartphones', 'Pixel 8', 2400], ['Laptops', 'MacBook Pro 14', 5500], ['Laptops', 'XPS 13', 3300], ['Laptops', 'ThinkPad X1', 2800], ['Tablets', 'iPad Air', 2600], ['Tablets', 'Surface Go', 1900], ['Wearables', 'Apple Watch S9', 1800], ['Wearables', 'Galaxy Watch 6', 1200], ['Accessories', 'AirPods Pro', 2100], ]; const columns = ['ProductType', 'Product', 'Sales']; await spread.dataManager().addTable('Sales', { data: records.map(record => { const item = {}; columns.forEach((column, index) => { item[column] = record[index]; }); return item; }), }).fetch(); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-designer/styles/gc.spread.sheets.designer.light.min.css"> <link rel="stylesheet" type="text/css" href="styles.css"> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-print/dist/gc.spread.sheets.print.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-datacharts-addon/dist/gc.spread.sheets.datacharts.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-tablesheet/dist/gc.spread.sheets.tablesheet.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script> const designerDependencyScripts = [ '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-barcode/dist/gc.spread.sheets.barcode.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-pdf/dist/gc.spread.sheets.pdf.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-pivot-addon/dist/gc.spread.pivot.pivottables.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-slicers/dist/gc.spread.sheets.slicers.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-reportsheet-addon/dist/gc.spread.report.reportsheet.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-ganttsheet/dist/gc.spread.sheets.ganttsheet.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-formula-panel/dist/gc.spread.sheets.formulapanel.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-io/dist/gc.spread.sheets.io.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-designer-resources-en/dist/gc.spread.sheets.designer.resource.en.min.js', '$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-designer/dist/gc.spread.sheets.designer.all.min.js', '$DEMOROOT$/spread/source/js/designer/license.js', ] function appendScriptNode (src) { const script = document.createElement('script'); script.src = src; script.async = false; script.type = 'text/javascript'; document.head.appendChild(script); } if (top === window) { // not in iframe designerDependencyScripts.forEach(appendScriptNode); } </script> <script src="app.js" type="text/javascript"></script> </head> <body> <div class="sample-tutorial"> <div id="demo-host"> <div id="spread-host"></div> <div id="panel-host"></div> </div> </div> </body> </html>
body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } #demo-host { width: 100%; height: 100%; overflow: hidden; float: left; } #spread-host { position: absolute; top: 0; left: 0; width: calc(100% - 380px); height: 100%; } #panel-host { position: absolute; top: 0; right: 0; width: 380px; height: 100%; }