Legend

You can customize the chart’s legend to better highlight which symbol or color represents each data series.

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

The chart legend supports the following customization:

  • Visible: the legend visibility.
  • Position: top, right, left, bottom, topRight.
  • Background: color, transparency.
  • Text: font family, font size, color.
  • Border: color, transparency, width.
  • Overlapping: whether the legend display with overlapping plotArea.
  • Layout: x, y, width, height.

You can customize the legend using the following code:

    var legend = chart.legend();
    legend.visible = "orange";
    legend.position = GC.Spread.Sheets.Charts.LegendPosition.top;
    legend.backColor = "orange";
    legend.backColorTransparency = 0.8;

    legend.fontFamily = "Arial";
    legend.fontSize = 9;
    legend.color = "green";

    legend.borderStyle.color = "green";
    legend.borderStyle.transparency = 0.3;
    legend.borderStyle.width = 3;

    legend.showLegendWithoutOverlapping = false;
    legend.layout= {
        x: 0.2,
        y: 0.5,
        width: 0.4,
        height: 0.2 
    }   

    chart.legend(legend);
The chart legend supports the following customization: Visible: the legend visibility. Position: top, right, left, bottom, topRight. Background: color, transparency. Text: font family, font size, color. Border: color, transparency, width. Overlapping: whether the legend display with overlapping plotArea. Layout: x, y, width, height. You can customize the legend using the following code:
var spread; window.onload = function () { spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 }); initSpread(spread); initEvent(spread); //readSetting(new GC.Spread.Sheets.CellTypes.CheckBoxList()); } function initSpread(spread) { var sheet = spread.getSheet(0); sheet.suspendPaint(); var dataArray = [ ["", 'Chrome', 'Firefox', 'IE', 'Safari', 'Edge', 'Opera', 'Other'], ["2014", 0.4966, 0.1801, 0.2455, 0.0470, 0.0, 0.0150, 0.0158], ["2015", 0.5689, 0.1560, 0.1652, 0.0529, 0.0158, 0.0220, 0.0192], ["2016", 0.6230, 0.1531, 0.1073, 0.0464, 0.0311, 0.0166, 0.0225], ["2017", 0.6360, 0.1304, 0.0834, 0.0589, 0.0443, 0.0223, 0.0246] ]; sheet.setArray(0, 0, dataArray); var chart = sheet.charts.add('Chart1', GC.Spread.Sheets.Charts.ChartType.lineMarkers, 30, 120, 480, 270, "A1:D5", GC.Spread.Sheets.Charts.RowCol.columns); chart.title({text: "Chart Legend"}); var legend = chart.legend(); legend.borderStyle.color = "green"; legend.borderStyle.width = 3; legend.fontSize = 9; legend.backColor = "orange"; legend.backColorTransparency = 0.8; chart.legend(legend); sheet.resumePaint(); } function initEvent(spread) { spread.bind(GC.Spread.Sheets.Events.FloatingElementSelected, function () { var sheet = spread.getActiveSheet(); var chart = getActiveChart(sheet); if (chart) { readSetting(chart); } }); _getElementById("apply").addEventListener('click', function () { applySetting(); }); } function readSetting(chart) { var legend = chart.legend(); _getElementById("visible").checked = legend.visible; _getElementById("position").value = legend.position; _getElementById("backColor").value = legend.backColor; _getElementById("backColorTransparency").value = legend.backColorTransparency; _getElementById("color").value = legend.color; _getElementById("fontFamily").value = legend.fontFamily; _getElementById("fontSize").value = legend.fontSize; _getElementById("border-color").value = legend.borderStyle.color; _getElementById("border-width").value = legend.borderStyle.width; _getElementById("border-transparency").value = legend.borderStyle.transparency; _getElementById("showLegendWithoutOverlapping").checked = legend.showLegendWithoutOverlapping !== false; if (legend.layout && legend.layout.x) { _getElementById("layoutX").value = legend.layout.x; } if (legend.layout && legend.layout.y) { _getElementById("layoutY").value = legend.layout.y; } if (legend.layout && legend.layout.width) { _getElementById("layoutWidth").value = legend.layout.width; } if (legend.layout && legend.layout.height) { _getElementById("layoutHeight").value = legend.layout.height; } } function applySetting() { var sheet = spread.getActiveSheet(); var chart = getActiveChart(sheet); if (!chart) { return; } var legend = { visible: _geBoolean("visible"), position: _getValue("position"), showLegendWithoutOverlapping: _geBoolean("showLegendWithoutOverlapping"), backColor: _getText("backColor"), backColorTransparency: _getFloat("backColorTransparency"), color: _getText("color"), fontFamily: _getText("fontFamily"), fontSize: _getValue("fontSize"), borderStyle:{ color: _getText("border-color"), width: _getValue("border-width"), transparency: _getFloat("border-transparency") }, layout: { x: _getFloat("layoutX"), y: _getFloat("layoutY"), width: _getFloat("layoutWidth"), height: _getFloat("layoutHeight") } } chart.legend(legend); } function getActiveChart(sheet) { var activeChart = null; sheet.charts.all().forEach(function (chart) { if (chart.isSelected()) { activeChart = chart; } }); return activeChart; } function _getElementById(id) { return document.getElementById(id); } function _geBoolean(id) { return _getElementById(id).checked; } function _getFloat(id) { return isNaN(parseFloat(_getElementById(id).value)) ? undefined : parseFloat(_getElementById(id).value); } function _getValue(id) { return parseInt(_getElementById(id).value); } function _getText(id) { return _getElementById(id).value; }
<!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 class="options-container"> <p>Change the properties below then press the Set button to apply these changes.</p> <div class="option-row"> <label for="visible">Visible</label> <input type="checkbox" id="visible" checked /> </div> <div class="option-row" id=""> <label for="position">Position</label> <select id="position"> <option value="1">top</option> <option value="2">right</option> <option value="3">left</option> <option value="4" selected="selected">bottom</option> <option value="5">topRight</option> </select> </div> <div class="option-row"> <input type="checkbox" id="showLegendWithoutOverlapping" checked /> <label style="display:inline" for="showLegendWithoutOverlapping">Show the legend without overlapping the chart</label> </div> <div class="option-row" id=""> <label for="backColor">Back Color</label> <input type="text" id="backColor" value="#FF0000" /> </div> <div class="option-row" id=""> <label for="backColorTransparency">Back Color Transparency</label> <input type="number" id="backColorTransparency" step="0.1" min="0" max="1" value="0.7" /> </div> <hr> <div class="option-row"> <label for="layoutX">Legend X(% of Chart)</label> <input type="number" id="layoutX" step="0.01" min="0" max="1" /> </div> <div class="option-row"> <label for="layoutY">Legend Y(% of Chart)</label> <input type="number" id="layoutY" step="0.01" min="0" max="1" /> </div> <div class="option-row"> <label for="layoutWidth">Legend Width(% of Chart)</label> <input type="number" id="layoutWidth" step="0.01" min="0" max="1" /> </div> <div class="option-row"> <label for="layoutHeight">Legend Height(% of Chart)</label> <input type="number" id="layoutHeight" step="0.01" min="0" max="1" /> </div> <hr> <div class="option-row" id=""> <label for="color">Font Color:</label> <input type="text" id="color" value="#00FF00" /> </div> <div class="option-row" id=""> <label for="fontFamily">Font Family:</label> <input type="text" id="fontFamily" value="Calibri" /> </div> <div class="option-row" id=""> <label for="fontSize">Font Size:</label> <input type="number" id="fontSize" step="1" min="0" max="100" value="1" /> </div> <hr> <div class="option-row" id=""> <label for="border-color">Border Color:</label> <input type="text" id="border-color" value="#00FF00" /> </div> <div class="option-row" id=""> <label for="border-width">Border Width:</label> <input type="number" id="border-width" step="1" min="0" max="100" value="1" /> </div> <div class="option-row" id=""> <label for="border-transparency">Border Transparency:</label> <input type="number" id="border-transparency" step="0.1" min="0" max="1" value="1" /> </div> <div class="option-row"> <input type="button" id="apply" value="Set" /> </div> </div> </div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; } .option-row { padding-bottom: 5px; } label { display:inline-block; } input{ padding: 1px 8px; box-sizing: border-box; width: 100%; } select{ width: 100%; } input[type=checkbox] { display: inline-block; width: auto; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }