面积图

SpreadJS 支持三种面积图类型:普通面积图、堆积面积图和百分比堆积面积图。面积图通过填充曲线下方的区域来展示数据随时间变化的趋势,特别适合显示数值大小和趋势走向,能够直观地对比不同数据系列对总量的贡献。

概述 本 Demo 展示了 SpreadJS 中三种面积图类型的使用方法和特点,包括普通面积图、堆积面积图和百分比堆积面积图。Demo 使用各大洲人口历史和预测数据,通过三个工作表分别展示不同面积图类型的数据可视化效果。 实现思路 创建包含 3 个工作表的工作簿,分别用于展示三种面积图类型 为每个工作表准备相同的人口数据(1750-2050年各大洲人口数据) 使用 charts.add() 方法创建图表,通过 ChartType 参数指定不同的面积图类型 自定义图表系列的背景色和边框样式,提高可视化效果 配置坐标轴样式和单位,设置图表标题 代码解析 创建不同类型的面积图 定义了三种面积图类型:area(普通面积图)、areaStacked(堆积面积图)和 areaStacked100(百分比堆积面积图)。 添加面积图 使用 charts.add() 方法创建图表,参数依次为:图表名称、图表类型、x 坐标、y 坐标、宽度、高度、数据范围、数据方向(按行排列)。 自定义系列样式 通过 chart.series().get() 获取所有系列,为每个系列设置半透明背景色 (backColor) 和边框样式 (border.color、border.width),最后使用 chart.series().set() 应用修改。 配置坐标轴 设置主要值轴的线条颜色、刻度位置和单位间隔。majorUnit 设置为 1000,表示 Y 轴刻度间隔为 1000(百万人口)。 设置图表标题 为图表设置主标题和 Y 轴标题,说明数据含义和单位。 运行效果 工作簿包含 3 个工作表,每个工作表展示一种面积图类型 第一个工作表展示普通面积图,显示各大洲人口趋势 第二个工作表展示堆积面积图,显示各大洲人口及总量趋势 第三个工作表展示百分比堆积面积图,显示各大洲人口占比趋势 每个图表都有清晰的标题和坐标轴标签 图表系列使用不同的颜色区分,具有半透明效果 API 参考 charts.add() 方法 name:图表名称 chartType:图表类型,使用 GC.Spread.Sheets.Charts.ChartType 枚举 x、y:图表位置坐标 width、height:图表宽度和高度 dataRange:数据范围,如 "A1:H6" dataOrientation:数据方向,GC.Spread.Sheets.Charts.RowCol.rows 或 columns 面积图类型 GC.Spread.Sheets.Charts.ChartType.area:普通面积图 GC.Spread.Sheets.Charts.ChartType.areaStacked:堆积面积图 GC.Spread.Sheets.Charts.ChartType.areaStacked100:百分比堆积面积图 chart.series() 方法 backColor:系列背景色,支持 rgba 格式 border.color:边框颜色 border.width:边框宽度
window.onload = function () { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {sheetCount: 3}); initSpread(spread); }; function initSpread(spread) { var chartType = [{ type: GC.Spread.Sheets.Charts.ChartType.area, desc: "area", }, { type: GC.Spread.Sheets.Charts.ChartType.areaStacked, desc: "areaStacked", }, { type: GC.Spread.Sheets.Charts.ChartType.areaStacked100, desc: "areaStacked100", }]; var sheets = spread.sheets; spread.suspendPaint(); initArea(sheets[0], chartType[0].desc, chartType[0].type); initArea(sheets[1], chartType[1].desc, chartType[1].type); initArea(sheets[2], chartType[2].desc, chartType[2].type); spread.resumePaint(); } function initArea(sheet, sheetName, chartType) { sheet.name(sheetName); sheet.suspendPaint(); //prepare data for chart var dataArray = [ ["", "1750", "1800", "1850", "1900", "1950", "2000", "2050"], ["Asia", 502, 635, 809, 947, 1402, 3634, 5268], ["Africa", 106, 107, 111, 133, 221, 767, 1766], ["America", 18, 31, 54, 156, 339, 818, 1201], ["Europe", 163, 203, 276, 408, 547, 729, 628], ["Oceania", 2, 2, 2, 6, 13, 30, 46] ]; sheet.setArray(0, 0, dataArray); sheet.resumePaint(); var chart = sheet.charts.add((sheet.name() + 'Chart1'), chartType, 0, 120, 800, 300, "A1:H6", GC.Spread.Sheets.Charts.RowCol.rows); var series = chart.series().get(); var colorArray = ['rgba(158, 200, 242, 0.7)', 'rgba(245, 87, 31, 0.7)', 'rgba(173, 255, 131, 0.7)', 'rgba(255, 178, 50, 0.7)', 'rgba(93, 93, 93, 0.7)']; var colorLineArray = ['rgba(158, 200, 242)', 'rgba(245, 87, 31)', 'rgba(173, 255, 131)', 'rgba(255, 178, 50)', 'rgba(93, 93, 93)']; for (var i = 0; i < series.length; i++) { series[i].backColor = colorArray[i]; series[i].border.color = colorLineArray[i]; series[i].border.width = 2; chart.series().set(i, series[i]); } var axes = chart.axes(); axes.primaryValue.lineStyle.color = 'grey'; axes.primaryValue.majorTickPosition = GC.Spread.Sheets.Charts.TickMark.outside; axes.primaryValue.majorUnit = 1000; chart.axes(axes); chart.title({text:"The Continents History and Forecast of Population Growth",fontSize:18}); chart.axes({primaryValue:{title:{text:"Units: one million"}}}); }
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="zh-cn" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" class="sample-tutorial"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }