Axis

Horizontal and vertical chart axes of SpreadJS charts in workbooks can be customized with different style properties. JavaScript code can be used to customize properties such as color, line style, tick and tick label positions/spacing, formatting, and title font size. It can be especially important to match styling across entire spreadsheets, particularly when implemented as dashboards or reports, so being able to customize axes in addition to other chart elements is useful.

Description
app.js
index.html
styles.css
Copy to CodeMine

There are four types of axis: primary category axis, primary value axis, secondary category axis, and secondary value axis.

You can get or set the style, line style, tick position, tick label’s position/spacing, format, numberFormatLinked, crosses, orientation,title, and gridline for these four axis using the following code.

    var axes = chart.axes();
    // the style of the axis: color, fontFamily, fontSize
    axes.primaryCategory.style.color = '#f15353';
    // the line style of the axis: color, width
    axes.primaryCategory.lineStyle.width = 0;
    // the tick position of the axis: majorTickPosition and minorTickPosition
    axes.primaryCategory.majorTickPosition = GC.Spread.Sheets.Charts.TickMark.none
    // the tick label position of the axis
    axes.primaryCategory.tickLabelPosition = GC.Spread.Sheets.Charts.TickLabelPosition.none;
    // the tick label spacing of the axis
    axes.primaryCategory.tickLabelSpacing = 3;
    // the format of the axis
    axes.primaryCategory.numberFormatLinked = true;
    // the title of the axis: text, color, fontFamily and font size
    axes.primaryCategory.title.text = 'Test Axis Title';
    axes.primaryCategory.title.fontSize = 14;
    chart.axes(axes);

You can get or set the gridline’s color, width and visibility.

    axes.primaryCategory.majorGridLine.color = '#f15353';
    axes.primaryCategory.majorGridLine.visible = true;

Logarithmic Axes: SpreadJS supports logarithmic scales for the value axis.

    var axes = chart.axes();
    axes.primaryValue.scaling = {
        logBase: 10
    };
    chart.axes(axes);

Axis Label Position: SpreadJS supports set label position for axis as below enum type GC.Spread.Sheets.Charts.TickLabelPosition.

  • high
  • low
  • nextToAxis
  • none
    var axes = chart.axes();
    axes.primaryCategory.tickLabelPosition = GC.Spread.Sheets.Charts.TickLabelPosition.high;
    chart.axes(axes);

Axis Orientation: SpreadJS supports setting the orientation of an axis

    var axes = chart.axes();
    axes.primaryValue.scaling = {
        orientation: GC.Spread.Sheets.Charts.AxisOrientation.maxMin;
    };
    chart.axes(axes);

Display Unit: The Display Unit property allows you to display units like Million/Trillions as the value axis display instead of the actual large numbers. This feature is useful to conserve space and makes it easier to read.

    var axes = chart.axes();
    axes.primaryValue.displayUnit = {
        unit: GC.Spread.Sheets.Charts.DisplayUnit.thousands,
        visible: true,
        style: {
            color: 'red',
            transparency: 0.5,
            fontFamily: 'Impact',
            fontSize: 20
        }
    };  
    chart.axes(axes);

Date axis: SpreadJS supports using a date axis with the below properties. You can adjust the date unit and date unit scale.

  • baseUnit
  • majorUnit
  • majorUnitScale
  • minorUnit
  • minorUnitScale
    var axes = chart.axes();
    axes.primaryCategory.baseUnit = GC.Spread.Sheets.Charts.TimeUnit.days;
    axes.primaryCategory.majorUnit = 2;
    axes.primaryCategory.majorUnitScale = GC.Spread.Sheets.Charts.TimeUnit.days;
    chart.axes(axes);

Crosses: SpreadJS supports set axis crosses as number type or below axis crosses enum type GC.Spread.Sheets.Charts.AxisCrossPoint.

  • automatic
  • maximum
  • minimum
    var axes = chart.axes();
    axes.primaryCategory.crossPoint = 3;
    axes.primaryValue.crossPoint = GC.Spread.Sheets.Charts.AxisCrossPoint.maximum;
    chart.axes(axes);
There are four types of axis: primary category axis, primary value axis, secondary category axis, and secondary value axis. You can get or set the style, line style, tick position, tick label’s position/spacing, format, numberFormatLinked, crosses, orientation,title, and gridline for these four axis using the following code. You can get or set the gridline’s color, width and visibility. Logarithmic Axes: SpreadJS supports logarithmic scales for the value axis. Axis Label Position: SpreadJS supports set label position for axis as below enum type GC.Spread.Sheets.Charts.TickLabelPosition. high low nextToAxis none Axis Orientation: SpreadJS supports setting the orientation of an axis Display Unit: The Display Unit property allows you to display units like Million/Trillions as the value axis display instead of the actual large numbers. This feature is useful to conserve space and makes it easier to read. Date axis: SpreadJS supports using a date axis with the below properties. You can adjust the date unit and date unit scale. baseUnit majorUnit majorUnitScale minorUnit minorUnitScale Crosses: SpreadJS supports set axis crosses as number type or below axis crosses enum type GC.Spread.Sheets.Charts.AxisCrossPoint. automatic maximum minimum
var spread; window.onload = function () { spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 }); var sheet = spread.getActiveSheet(); sheet.suspendPaint(); sheet.setValue(0, 1, "Apple"); sheet.setValue(0, 2, "Banana"); sheet.setValue(0, 3, "Pear"); sheet.setValue(1, 0, "People1"); sheet.setValue(2, 0, "People2"); sheet.setValue(3, 0, "People3"); for (var r = 1; r <= 3; r++) { for (var c = 1; c <= 3; c++) { sheet.setValue(r, c, parseInt(Math.random() * 100)); } } var dataArray = [ ["Month", 'Fund Income', 'Stock Income', 'Bank Interest Income'], ["Jan", 100, 2, 9], ["Feb", -96, 15, 10], ["Mar", 53, 88, 8], ["Apr", -15, 150, 1], ["May", 77, -52, 20], ["Jun", 20, 66, 6], ["Jul", 60, 2, 9], ["Aug", -26, 15, 30], ["Sep ", 23, 78, 8], ["Oct", -15, 100, 21], ["Nov", 57, -52, 3], ["Dec", 30, 55, 16], ]; sheet.setArray(0, 6, dataArray); sheet.getRange(1, 7, 12, 3).formatter("$#,##0.00"); //add chart var Charts = GC.Spread.Sheets.Charts; var columnChart = sheet.charts.add('columnChart', Charts.ChartType.columnClustered, 10, 100, 400, 350); var lineChart = sheet.charts.add('lineChart', GC.Spread.Sheets.Charts.ChartType.line, 420, 100, 400, 350); var orientationChart = sheet.charts.add('orientationChart', Charts.ChartType.columnClustered, 830, 100, 400, 350, 'A1:D4'); var series = columnChart.series(); series.add({ chartType: Charts.ChartType.columnClustered, axisGroup: Charts.AxisGroup.primary, name: "Sheet1!$A$2", xValues: "Sheet1!$B$1:$D$1", yValues: "Sheet1!$B$2:$D$2" }); series.add({ chartType: Charts.ChartType.columnClustered, axisGroup: Charts.AxisGroup.primary, name: "Sheet1!$A$3", xValues: "Sheet1!$B$1:$D$1", yValues: "Sheet1!$B$3:$D$3" }); series.add({ chartType: Charts.ChartType.lineMarkers, axisGroup: Charts.AxisGroup.secondary, name: "Sheet1!$A$4", xValues: "Sheet1!$B$1:$D$1", yValues: "Sheet1!$B$4:$D$4" }); var axes = columnChart.axes(); axes.primaryCategory.style.color = 'orange'; axes.primaryCategory.title.color = 'orange'; axes.primaryCategory.title.text = 'Primary Category Axis'; axes.primaryValue.style.color = 'red'; axes.primaryValue.title.color = 'red'; axes.primaryValue.title.text = 'Primary Value Logarithmic Axis'; axes.primaryValue.title.fontSize = 16; axes.primaryValue.scaling = { logBase: 2 }; axes.secondaryCategory.visible = true; axes.secondaryCategory.style.color = 'green'; axes.secondaryCategory.title.color = 'green'; axes.secondaryCategory.title.text = 'Secondary Category Axis'; axes.secondaryCategory.title.fontSize = 16; axes.secondaryValue.style.color = 'blue'; axes.secondaryValue.title.color = 'blue'; axes.secondaryValue.format = 'General'; axes.secondaryValue.title.text = 'Secondary Value Axis'; var columnChartTitle = columnChart.title(); columnChartTitle.text = "Product Sales"; columnChart.title(columnChartTitle); columnChart.axes(axes); series = lineChart.series(); series.add({ chartType: Charts.ChartType.line, axisGroup: Charts.AxisGroup.primary, name: "Sheet1!$H$1", xValues: "Sheet1!$G$2:$G$13", yValues: "Sheet1!$H$2:$H$13" }); series.add({ chartType: Charts.ChartType.columnClustered, axisGroup: Charts.AxisGroup.secondary, name: "Sheet1!$I$1", xValues: "Sheet1!$G$2:$G$13", yValues: "Sheet1!$I$2:$I$13" }); series.add({ chartType: Charts.ChartType.columnClustered, axisGroup: Charts.AxisGroup.secondary, name: "Sheet1!$J$1", xValues: "Sheet1!$G$2:$G$13", yValues: "Sheet1!$J$2:$J$13" }); axes = lineChart.axes(); axes.primaryCategory.crossPoint = 6; axes.primaryCategory.tickLabelSpacing = 2; axes.secondaryValue.visible = false; lineChart.axes(axes); var series1 = lineChart.series().get(0); series1.smooth = true; lineChart.series().set(0, series1); var lineChartTitle = lineChart.title(); lineChartTitle.text = "First Half Financial Income"; lineChart.title(lineChartTitle); var axes2 = orientationChart.axes(); var orientationChartTitle = orientationChart.title(); orientationChartTitle.text = "Product Sales(reverse order)"; orientationChart.title(orientationChartTitle); axes2.primaryValue.scaling = { orientation: GC.Spread.Sheets.Charts.AxisOrientation.maxMin }; orientationChart.axes(axes2); sheet.resumePaint(); };
<!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"> <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-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-charts/dist/gc.spread.sheets.charts.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 class="sample-tutorial"> <div id="ss" class="sample-spreadsheets"></div> </div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: 100% ; height: 100%; overflow: hidden; float: left; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }