如何为Google Apps Script的EmbeddedChartBuilder设置X/Y轴并指定数据列
指定X轴与数据系列的Google Apps Script折线图实现
针对你提供的折线图创建函数,要实现自定义指定X轴列和数据系列列,有两种实用方案,以下是具体实现:
方案一:分范围添加X轴与数据系列
适合X轴和系列数据不连续的场景,精确控制每个参与图表的范围:
function newCustomChart(xAxisRange, seriesRanges, sheet) { // 初始化图表基础配置 var chart = sheet.newChart() .setChartType(Charts.ChartType.LINE) .setPosition(5, 5, 0, 0) .setOption("title", "Model run 1") .setOption("pointSize", 2) .setOption("lineWidth", 1); // 添加X轴数据范围 chart.addRange(xAxisRange); // 批量添加所有数据系列的范围 seriesRanges.forEach(range => chart.addRange(range)); // 关键配置:仅使用显式添加的范围,关闭自动识别维度 chart.setHiddenDimensionStrategy(Charts.HiddenDimensionStrategy.ONLY_SPECIFIED) // 可选:配置X轴标题 .setOption("hAxis", { title: "自定义X轴标题" }) // 可选:自定义每个系列的图例标签 .setOption("series", { 0: { labelInLegend: "数据系列1" }, 1: { labelInLegend: "数据系列2" } }); // 构建并插入图表 sheet.insertChart(chart.build()); }
调用示例
假设你的数据在Sheet1中,A列为X轴数据,B、C列为数据系列:
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // X轴范围(跳过表头,从A2开始) var xAxisRange = activeSheet.getRange("A2:A100"); // 数据系列范围数组 var seriesRanges = [ activeSheet.getRange("B2:B100"), activeSheet.getRange("C2:C100") ]; // 调用函数创建图表 newCustomChart(xAxisRange, seriesRanges, activeSheet);
方案二:从整体数据范围指定列索引
适合数据在连续区域的场景,直接指定列索引来定义X轴和系列:
function newChartWithColumnIndices(dataRange, xAxisColIndex, seriesColIndices, sheet) { var chart = sheet.newChart() .setChartType(Charts.ChartType.LINE) .addRange(dataRange) .setPosition(5, 5, 0, 0) .setOption("title", "Model run 1") .setOption("pointSize", 2) .setOption("lineWidth", 1); // 关键配置:关闭默认第一列为X轴的行为 chart.setOption("useFirstColumnAsDomain", false) // 指定X轴对应的列索引(从0开始计数) .setOption("domainAxis", { index: xAxisColIndex }); // 配置数据系列对应的列索引 var seriesConfig = {}; seriesColIndices.forEach((colIndex, seriesIndex) => { seriesConfig[seriesIndex] = { sourceColumn: colIndex, targetAxisIndex: 0 // 0表示左侧Y轴,1为右侧Y轴(双Y轴场景) }; }); chart.setOption("series", seriesConfig); sheet.insertChart(chart.build()); }
调用示例
假设你的数据在Sheet1的A1:C100区域(包含表头),指定A列(索引0)为X轴,B、C列(索引1、2)为数据系列:
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var fullDataRange = activeSheet.getRange("A1:C100"); // X轴列索引0,系列列索引[1,2] newChartWithColumnIndices(fullDataRange, 0, [1, 2], activeSheet);
核心配置说明
setHiddenDimensionStrategy(Charts.HiddenDimensionStrategy.ONLY_SPECIFIED):仅使用手动添加的范围,避免图表自动识别多余数据。useFirstColumnAsDomain: false:禁用默认将第一列设为X轴的规则,允许自定义指定X轴列。domainAxis.index:直接指定X轴对应的列索引(从0开始)。series配置:可自定义每个系列的数据源列、Y轴归属、图例标签等属性。
内容的提问来源于stack exchange,提问作者tovernaar123
相关产品推荐
相关产品推荐

