The x-axis represents different categories in a line chart, but the x-axis in a scatter chart represents the actual values of the x variable.
A scatter chart has two value axes: a horizontal (x) and a vertical (y) value axis. It combines x and y values into single data points and shows them in irregular intervals, also known as clusters. Scatter charts are typically used for showing and comparing numeric values like scientific, statistical, and engineering data.
Scatter Chart Type
Scatter: This type of chart shows points based on a selected data range, which can be analyzed to determine if there's a relationship between the x and y variables.
Scatter with Smooth Lines and Markers: This type of scatter chart simply shows a smooth curve that connects the data points.
Scatter with Smooth Lines: This type of scatter chart shows a smooth curve that connects the data points and doesn’t display the individual points.
Scatter with Straight Lines and Markers: This type of scatter chart shows straight connecting lines between data points.
Scatter with Straight Lines: This type of scatter chart shows straight connecting lines between data points and doesn’t depict the individual points.
Bubble Chart: A bubble chart is a variation of a scatter chart in which the data points are replaced with bubbles, and an additional dimension of the data is represented in the size of the bubbles. Just like a scatter chart, a bubble chart does not use a category axis — both horizontal and vertical axes are value axes. Also, a bubble chart plots z (size) values as well as x values and y values.
You can use a bubble chart instead of a scatter chart if the data has three data series that each contain a set of values. The sizes of the bubbles are determined by the values in the third data series. Bubble charts are often used to present financial data. Different bubble sizes are useful to visually emphasize specific values.
You can customize the color, shape, border of marker at the "Scatter with Smooth Lines and Markers" and "Scatter with Straight Lines and Markers".
import * as React from 'react';
import { createRoot } from 'react-dom/client';
import './styles.css';
import { AppFunc } from './app-func';
// import { App } from './app-class';
// 1. Functional Component sample
createRoot(document.getElementById('app')).render(<AppFunc />);
// 2. Class Component sample
// createRoot(document.getElementById('app')).render(<App />);
import * as React from 'react';
import GC from '@mescius/spread-sheets';
import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react';
import '@mescius/spread-sheets-shapes';
import '@mescius/spread-sheets-charts';
export function AppFunc() {
const initSpread = (spread) => {
let chartType = [{
type: GC.Spread.Sheets.Charts.ChartType.xyScatterSmoothNoMarkers,
desc: "xyScatterSmoothNoMarkers",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterSmooth,
desc: "xyScatterSmooth",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterLinesNoMarkers,
desc: "xyScatterLinesNoMarkers",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterLines,
desc: "xyScatterLines",
}];
let sheets = spread.sheets;
spread.suspendPaint();
initXYScatterSheet(sheets[0]);
initXYScatterChart(sheets[0]);
for (let i = 0; i < chartType.length; i++) {
let sheet = sheets[i + 1];
initSheet(sheet, chartType[i].desc);
initChart(sheet, chartType[i].type);//add chart
}
initBubbleSheet(sheets[sheets.length - 1]);
initBubbleChart(sheets[sheets.length - 1]);
spread.options.tabStripRatio = 0.8;
spread.resumePaint();
}
const initSheet = (sheet, sheetName) => {
sheet.name(sheetName);
//prepare data for chart
let dataArray = [["Period", "Zantedeschia", "Celosia", "Calendula"], [0, 0, 0, 0], [1, 2, 1, 1], [2, 6, 1, 2], [3, 6, 1, 2], [4, 10, 2, 2], [5, 11, 2, 2], [6, 13, 2, 3], [7, 14, 2, 4], [8, 15, 3, 5], [9, 16, 3, 7], [10, 17, 4, 9], [11, 22, 4, 11], [12, 27, 5, 12], [13, 30, 8, 13], [14, 32, 10, 14], [15, 34, 13, 15], [16, 36, 16, 15], [17, 37, 20, 15], [18, 39, 23, 15], [19, 40, 25, 15], [20, 40, 25, 15]];
sheet.setArray(0, 0, dataArray);
}
const initChart = (sheet, chartType) => {
//add chart
let chart = sheet.charts.add((sheet.name() + 'Chart1'), chartType, 280, 0, 900, 420, "A1:D22", GC.Spread.Sheets.Charts.RowCol.columns);
changeGridLines(chart);
if (chartType === GC.Spread.Sheets.Charts.ChartType.xyScatterSmooth || chartType === GC.Spread.Sheets.Charts.ChartType.xyScatterLines) {
changeMarker(chart);
}
chart.title({ text: "The Influence of Greenhouse Cultivation on Different Flowers" });
}
// show gridLines
const changeGridLines = (chart) => {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryCategory.majorGridLine.visible = true;
gridLinesAxes.primaryCategory.title.text = "Period(day)";
gridLinesAxes.primaryValue.title.text = "Number of Flowering";
chart.axes(gridLinesAxes);
}
// show gridLines
const changeXYScatterChartGridLines = (chart) => {
let axes = chart.axes();
axes.primaryCategory.majorGridLine.visible = true;
axes.primaryCategory.min = 140;
axes.primaryCategory.max = 200;
axes.primaryCategory.title.text = "Height(cm)";
axes.primaryValue.min = 40;
axes.primaryValue.max = 120;
axes.primaryValue.title.text = "Weight(kg)";
chart.axes(axes);
}
const addSeries = (chart, chartType) => {
let series1 = {}, series2 = {};
series1.name = "A1";
series1.xValues = "A3:A200";
series1.yValues = "B3:B200";
series1.chartType = chartType;
series1.axisGroup = GC.Spread.Sheets.Charts.AxisGroup.primary;
chart.series().add(series1);
series2.name = "C1";
series2.xValues = "C3:C200";
series2.yValues = "D3:D200";
series2.chartType = chartType;
series2.axisGroup = GC.Spread.Sheets.Charts.AxisGroup.primary;
chart.series().add(series2);
}
const initXYScatterSheet = (sheet) => {
sheet.name("xyScatter");
let femaleDataArray = [["Female", ""], ["Height", "Weight"],
[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6],
[170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2],
[172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0],
[147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8],
[159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8],
[174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0],
[154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8],
[162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6],
[168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3],
[167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8],
[167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3],
[168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3],
[156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0],
[162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7],
[151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5],
[164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2],
[170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8],
[163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9],
[161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2],
[159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4],
[161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4],
[171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2],
[166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0],
[159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0],
[162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4],
[172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4],
[162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5],
[158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5],
[167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2],
[170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2],
[160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3],
[166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5],
[170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4],
[167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6],
[160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8],
[177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1],
[172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5],
[175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2],
[165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6],
[168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0],
[162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0],
[157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9],
[172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1],
[161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4],
[152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7],
[160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5],
[167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8],
[175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0],
[174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9],
[156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6],
[169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8],
[176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]];
sheet.setArray(0, 0, femaleDataArray);
let maleDataArray = [["Male", ""], ["Height", "Weight"],
[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8],
[181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6],
[180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0],
[184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9],
[176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8],
[178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9],
[183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1],
[170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1],
[186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6],
[182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1],
[169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2],
[163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2],
[177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0],
[167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2],
[171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2],
[174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9],
[180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9],
[180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0],
[175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3],
[176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7],
[184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5],
[157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3],
[165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1],
[185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0],
[177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2],
[188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1],
[166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6],
[185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1],
[190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5],
[176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1],
[172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5],
[167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5],
[172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9],
[193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1],
[167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8],
[188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5],
[171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4],
[182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5],
[188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6],
[175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7],
[177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5],
[174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6],
[167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7],
[175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0],
[177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3],
[174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3],
[174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9],
[180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1],
[170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1],
[180.3, 83.2], [180.3, 83.2]];
sheet.setArray(0, 2, maleDataArray);
}
const initXYScatterChart = (sheet) => {
let chartType = GC.Spread.Sheets.Charts.ChartType.xyScatter;
//add chart
let chart = sheet.charts.add((sheet.name() + 'Chart1'), chartType, 280, 0, 900, 420, null);
addSeries(chart, chartType);
changeXYScatterChartGridLines(chart);
chart.title({ text: "Male and Female Height and Weight Distribution" });
}
const initBubbleSheet = (sheet) => {
sheet.name('Bubble');
//prepare data for chart
let dataArray = [
[28604, 77, 17096869, 74, 67096869],
[41163, 77.4, 27662440, 71.8, 47662440],
[3516, 68, 1154605773, 78, 1654605773],
[13670, 74.7, 10582082, 72.7, 69582082],
[28599, 75, 4986705, 79, 1986705],
[29476, 77.1, 56943299, 82.1, 26943299],
[31476, 75.4, 78958237, 79.4, 98958237],
[28666, 78.1, 254830, 74.1, 954830],
[4777, 57.7, 870601776, 67.7, 570601776],
[29550, 79.1, 122249285, 82.1, 22249285],
[5076, 67.9, 20194354, 64.9, 40194354],
[12087, 72, 42972254, 76, 342972254],
[24021, 75.4, 3397534, 78.4, 1397534],
[48296, 76.8, 4240375, 78.8, 14240375],
[10088, 70.8, 38195258, 78.8, 18195258],
[19349, 69.6, 147568552, 77.6, 234568552],
[10670, 67.3, 53994605, 77.3, 83994605],
[26424, 75.7, 57110117, 83.7, 86110117],
[37062, 75.4, 252847810, 80.4, 652847810],
[49056, 81.8, 23968973, 79.8, 63968973],
[43294, 81.7, 35939927, 78.7, 15939927],
[13334, 76.9, 1376048943, 80.9, 976048943],
[21291, 78.5, 11389562, 82.5, 151389562],
[38923, 80.8, 5503457, 76.8, 1503457],
[57599, 81.9, 64395345, 75.9, 34395345],
[49053, 81.1, 80688545, 75.1, 20688545],
[42182, 82.8, 329425, 83.8, 1329425],
[5903, 66.8, 1311050527, 65.8, 311050527],
[36162, 83.5, 126573481, 85.5, 326573481],
[4390, 71.4, 25155317, 77.4, 55155317],
[34644, 80.7, 50293439, 83.7, 20293439],
[24186, 80.6, 4528526, 78.6, 13528526],
[64304, 81.6, 5210967, 83.6, 3210967],
[24787, 77.3, 38611794, 74.3, 88611794],
[23038, 73.13, 143456918, 76.13, 83456918],
[19360, 76.5, 78665830, 79.5, 58665830],
[58225, 81.4, 64715810, 76.4, 84715810],
[53354, 79.1, 321773631, 83.1, 721773631]
];
sheet.setArray(0, 0, dataArray);
}
const initBubbleChart = (sheet) => {
let chart = sheet.charts.add('BubbleChart1', GC.Spread.Sheets.Charts.ChartType.bubble, 280, 0, 620, 400, "A1:E38", GC.Spread.Sheets.Charts.RowCol.columns);
changeBubbleGridLines(chart);
changeBubbleBackColor(chart);
changePrimaryCategoryMin(chart);
}
// hide bubble gridLines
const changeBubbleGridLines = (chart) => {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryCategory.majorGridLine.visible = false;
gridLinesAxes.primaryValue.majorGridLine.visible = false;
chart.axes(gridLinesAxes);
}
//change bubble backColor
const changeBubbleBackColor = (chart) => {
let series = chart.series().get();
let seriesColors = ['rgba(25, 183, 207, 0.6)', 'rgba(251, 118, 123, 0.6)'];
for (let i = 0; i < series.length; i++) {
let seriesItem = series[i];
seriesItem.backColor = seriesColors[i];
chart.series().set(i, seriesItem);
}
}
// change primary min num
const changePrimaryCategoryMin = (chart) => {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryValue.min = 50;
gridLinesAxes.primaryValue.max = 88;
chart.axes(gridLinesAxes);
}
// change Marker
const changeMarker = (chart) => {
let preSet = [
{ fill: "", shape: 0 /** circle */, size: 7, border: { color: "blue", width: 1 } },
{ fill: "", shape: 8/** star */, size: 9, border: { color: "black", width: 1 } },
{ fill: "yellow", shape: 2 /** diamond */, size: 7, border: { color: "red", width: 2 } },
];
let series = chart.series().get();
let seriesItem;
for (let i = 0; i < series.length; i++) {
seriesItem = series[i];
seriesItem.symbol = preSet[i];
chart.series().set(i, seriesItem);
}
}
return (<div class="sample-tutorial">
<div class="sample-spreadsheets">
<SpreadSheets workbookInitialized={spread => initSpread(spread)}>
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
</SpreadSheets>
</div>
</div>);
}
import * as React from 'react';
import GC from '@mescius/spread-sheets';
import { SpreadSheets, Worksheet } from '@mescius/spread-sheets-react';
import '@mescius/spread-sheets-shapes';
import '@mescius/spread-sheets-charts';
const Component = React.Component;
export class App extends Component {
constructor(props) {
super(props);
this.spread = null;
}
render() {
return (<div class="sample-tutorial">
<div class="sample-spreadsheets">
<SpreadSheets workbookInitialized={spread => this.initSpread(spread)}>
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
<Worksheet />
</SpreadSheets>
</div>
</div>);
}
initSpread(spread) {
let chartType = [{
type: GC.Spread.Sheets.Charts.ChartType.xyScatterSmoothNoMarkers,
desc: "xyScatterSmoothNoMarkers",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterSmooth,
desc: "xyScatterSmooth",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterLinesNoMarkers,
desc: "xyScatterLinesNoMarkers",
}, {
type: GC.Spread.Sheets.Charts.ChartType.xyScatterLines,
desc: "xyScatterLines",
}];
let sheets = spread.sheets;
spread.suspendPaint();
this.initXYScatterSheet(sheets[0]);
this.initXYScatterChart(sheets[0]);
for (let i = 0; i < chartType.length; i++) {
let sheet = sheets[i + 1];
this.initSheet(sheet, chartType[i].desc);
this.initChart(sheet, chartType[i].type);//add chart
}
this.initBubbleSheet(sheets[sheets.length - 1]);
this.initBubbleChart(sheets[sheets.length - 1]);
spread.options.tabStripRatio = 0.8;
spread.resumePaint();
}
initSheet(sheet, sheetName) {
sheet.name(sheetName);
//prepare data for chart
let dataArray = [["Period", "Zantedeschia", "Celosia", "Calendula"], [0, 0, 0, 0], [1, 2, 1, 1], [2, 6, 1, 2], [3, 6, 1, 2], [4, 10, 2, 2], [5, 11, 2, 2], [6, 13, 2, 3], [7, 14, 2, 4], [8, 15, 3, 5], [9, 16, 3, 7], [10, 17, 4, 9], [11, 22, 4, 11], [12, 27, 5, 12], [13, 30, 8, 13], [14, 32, 10, 14], [15, 34, 13, 15], [16, 36, 16, 15], [17, 37, 20, 15], [18, 39, 23, 15], [19, 40, 25, 15], [20, 40, 25, 15]];
sheet.setArray(0, 0, dataArray);
}
initChart(sheet, chartType) {
//add chart
let chart = sheet.charts.add((sheet.name() + 'Chart1'), chartType, 280, 0, 900, 420, "A1:D22", GC.Spread.Sheets.Charts.RowCol.columns);
this.changeGridLines(chart);
if (chartType === GC.Spread.Sheets.Charts.ChartType.xyScatterSmooth || chartType === GC.Spread.Sheets.Charts.ChartType.xyScatterLines) {
this.changeMarker(chart);
}
chart.title({ text: "The Influence of Greenhouse Cultivation on Different Flowers" });
}
// show gridLines
changeGridLines(chart) {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryCategory.majorGridLine.visible = true;
gridLinesAxes.primaryCategory.title.text = "Period(day)";
gridLinesAxes.primaryValue.title.text = "Number of Flowering";
chart.axes(gridLinesAxes);
}
// show gridLines
changeXYScatterChartGridLines(chart) {
let axes = chart.axes();
axes.primaryCategory.majorGridLine.visible = true;
axes.primaryCategory.min = 140;
axes.primaryCategory.max = 200;
axes.primaryCategory.title.text = "Height(cm)";
axes.primaryValue.min = 40;
axes.primaryValue.max = 120;
axes.primaryValue.title.text = "Weight(kg)";
chart.axes(axes);
}
addSeries(chart, chartType) {
let series1 = {}, series2 = {};
series1.name = "A1";
series1.xValues = "A3:A200";
series1.yValues = "B3:B200";
series1.chartType = chartType;
series1.axisGroup = GC.Spread.Sheets.Charts.AxisGroup.primary;
chart.series().add(series1);
series2.name = "C1";
series2.xValues = "C3:C200";
series2.yValues = "D3:D200";
series2.chartType = chartType;
series2.axisGroup = GC.Spread.Sheets.Charts.AxisGroup.primary;
chart.series().add(series2);
}
initXYScatterSheet(sheet) {
sheet.name("xyScatter");
let femaleDataArray = [["Female", ""], ["Height", "Weight"],
[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6],
[170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2],
[172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0],
[147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8],
[159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8],
[174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0],
[154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8],
[162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6],
[168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3],
[167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8],
[167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3],
[168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3],
[156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0],
[162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7],
[151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5],
[164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2],
[170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8],
[163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9],
[161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2],
[159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4],
[161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4],
[171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2],
[166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0],
[159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0],
[162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4],
[172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4],
[162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5],
[158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5],
[167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2],
[170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2],
[160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3],
[166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5],
[170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4],
[167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6],
[160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8],
[177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1],
[172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5],
[175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2],
[165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6],
[168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0],
[162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0],
[157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9],
[172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1],
[161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4],
[152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7],
[160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5],
[167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8],
[175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0],
[174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9],
[156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6],
[169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8],
[176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]];
sheet.setArray(0, 0, femaleDataArray);
let maleDataArray = [["Male", ""], ["Height", "Weight"],
[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8],
[181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6],
[180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0],
[184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9],
[176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8],
[178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9],
[183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1],
[170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1],
[186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6],
[182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1],
[169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2],
[163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2],
[177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0],
[167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2],
[171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2],
[174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9],
[180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9],
[180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0],
[175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3],
[176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7],
[184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5],
[157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3],
[165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1],
[185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0],
[177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2],
[188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1],
[166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6],
[185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1],
[190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5],
[176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1],
[172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5],
[167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5],
[172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9],
[193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1],
[167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8],
[188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5],
[171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4],
[182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5],
[188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6],
[175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7],
[177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5],
[174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6],
[167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7],
[175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0],
[177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3],
[174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3],
[174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9],
[180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1],
[170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1],
[180.3, 83.2], [180.3, 83.2]];
sheet.setArray(0, 2, maleDataArray);
}
initXYScatterChart(sheet) {
let chartType = GC.Spread.Sheets.Charts.ChartType.xyScatter;
//add chart
let chart = sheet.charts.add((sheet.name() + 'Chart1'), chartType, 280, 0, 900, 420, null);
this.addSeries(chart, chartType);
this.changeXYScatterChartGridLines(chart);
chart.title({ text: "Male and Female Height and Weight Distribution" });
}
initBubbleSheet(sheet) {
sheet.name('Bubble');
//prepare data for chart
let dataArray = [
[28604, 77, 17096869, 74, 67096869],
[41163, 77.4, 27662440, 71.8, 47662440],
[3516, 68, 1154605773, 78, 1654605773],
[13670, 74.7, 10582082, 72.7, 69582082],
[28599, 75, 4986705, 79, 1986705],
[29476, 77.1, 56943299, 82.1, 26943299],
[31476, 75.4, 78958237, 79.4, 98958237],
[28666, 78.1, 254830, 74.1, 954830],
[4777, 57.7, 870601776, 67.7, 570601776],
[29550, 79.1, 122249285, 82.1, 22249285],
[5076, 67.9, 20194354, 64.9, 40194354],
[12087, 72, 42972254, 76, 342972254],
[24021, 75.4, 3397534, 78.4, 1397534],
[48296, 76.8, 4240375, 78.8, 14240375],
[10088, 70.8, 38195258, 78.8, 18195258],
[19349, 69.6, 147568552, 77.6, 234568552],
[10670, 67.3, 53994605, 77.3, 83994605],
[26424, 75.7, 57110117, 83.7, 86110117],
[37062, 75.4, 252847810, 80.4, 652847810],
[49056, 81.8, 23968973, 79.8, 63968973],
[43294, 81.7, 35939927, 78.7, 15939927],
[13334, 76.9, 1376048943, 80.9, 976048943],
[21291, 78.5, 11389562, 82.5, 151389562],
[38923, 80.8, 5503457, 76.8, 1503457],
[57599, 81.9, 64395345, 75.9, 34395345],
[49053, 81.1, 80688545, 75.1, 20688545],
[42182, 82.8, 329425, 83.8, 1329425],
[5903, 66.8, 1311050527, 65.8, 311050527],
[36162, 83.5, 126573481, 85.5, 326573481],
[4390, 71.4, 25155317, 77.4, 55155317],
[34644, 80.7, 50293439, 83.7, 20293439],
[24186, 80.6, 4528526, 78.6, 13528526],
[64304, 81.6, 5210967, 83.6, 3210967],
[24787, 77.3, 38611794, 74.3, 88611794],
[23038, 73.13, 143456918, 76.13, 83456918],
[19360, 76.5, 78665830, 79.5, 58665830],
[58225, 81.4, 64715810, 76.4, 84715810],
[53354, 79.1, 321773631, 83.1, 721773631]
];
sheet.setArray(0, 0, dataArray);
}
initBubbleChart(sheet) {
let chart = sheet.charts.add('BubbleChart1', GC.Spread.Sheets.Charts.ChartType.bubble, 280, 0, 620, 400, "A1:E38", GC.Spread.Sheets.Charts.RowCol.columns);
this.changeBubbleGridLines(chart);
this.changeBubbleBackColor(chart);
this.changePrimaryCategoryMin(chart);
}
// hide bubble gridLines
changeBubbleGridLines(chart) {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryCategory.majorGridLine.visible = false;
gridLinesAxes.primaryValue.majorGridLine.visible = false;
chart.axes(gridLinesAxes);
}
//change bubble backColor
changeBubbleBackColor(chart) {
let series = chart.series().get();
let seriesColors = ['rgba(25, 183, 207, 0.6)', 'rgba(251, 118, 123, 0.6)'];
for (let i = 0; i < series.length; i++) {
let seriesItem = series[i];
seriesItem.backColor = seriesColors[i];
chart.series().set(i, seriesItem);
}
}
// change primary min num
changePrimaryCategoryMin(chart) {
let gridLinesAxes = chart.axes();
gridLinesAxes.primaryValue.min = 50;
gridLinesAxes.primaryValue.max = 88;
chart.axes(gridLinesAxes);
}
// change Marker
changeMarker(chart) {
let preSet = [
{ fill: "", shape: 0 /** circle */, size: 7, border: { color: "blue", width: 1 } },
{ fill: "", shape: 8/** star */, size: 9, border: { color: "black", width: 1 } },
{ fill: "yellow", shape: 2 /** diamond */, size: 7, border: { color: "red", width: 2 } },
];
let series = chart.series().get();
let seriesItem;
for (let i = 0; i < series.length; i++) {
seriesItem = series[i];
seriesItem.symbol = preSet[i];
chart.series().set(i, seriesItem);
}
}
}
<!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/react/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<!-- SystemJS -->
<script src="$DEMOROOT$/en/react/node_modules/systemjs/dist/system.src.js"></script>
<script src="systemjs.config.js"></script>
<script>
System.import('$DEMOROOT$/en/lib/react/license.js').then(function () {
System.import('./src/app');
});
</script>
</head>
<body>
<div id="app"></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;
}
#app {
height: 100%;
}
(function (global) {
System.config({
transpiler: 'plugin-babel',
babelOptions: {
es2015: true,
react: true
},
meta: {
'*.css': { loader: 'css' }
},
paths: {
// paths serve as alias
'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
'@mescius/spread-sheets-shapes': 'npm:@mescius/spread-sheets-shapes/index.js',
'@mescius/spread-sheets-charts': 'npm:@mescius/spread-sheets-charts/index.js',
'@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js',
'@mescius/spread-sheets-react': 'npm:@mescius/spread-sheets-react/index.js',
'@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js',
'react': 'npm:react/cjs/react.production.js',
'react-dom': 'npm:react-dom/cjs/react-dom.production.js',
'react-dom/client': 'npm:react-dom/cjs/react-dom-client.production.js',
'scheduler': 'npm:scheduler/cjs/scheduler.production.js',
'css': 'npm:systemjs-plugin-css/css.js',
'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js',
'systemjs-babel-build':'npm:systemjs-plugin-babel/systemjs-babel-browser.js'
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
src: {
defaultExtension: 'jsx'
},
"node_modules": {
defaultExtension: 'js'
},
}
});
})(this);