Integration with Highcharts

This detailed tutorial will walk you through the integration of WebDataRocks with Highcharts.

Supported chart types

WebDataRocks supports the following chart types of the Highcharts library:

Follow the steps below to start creating interactive data visualizations.

Step 1. Add WebDataRocks to your project

Step 1.1. Complete the Quick start guide. Your code of the component with WebDatarocks should look similar to the following:

<script setup>
import { Pivot } from "@webdatarocks/vue-webdatarocks";
import "@webdatarocks/webdatarocks/webdatarocks.css";
</script>

<template>
<div>
<Pivot
toolbar
/>
</div>
</template>

Step 1.2. Create a report for WebDataRocks — connect to the data source and define which fields should be displayed in rows, columns, and measures:

<script setup>
import { Pivot } from "@webdatarocks/vue-webdatarocks";
import "@webdatarocks/webdatarocks/webdatarocks.css";

const report = {
dataSource: {
filename: "https://cdn.webdatarocks.com/data/data.csv",
},
slice: {
rows: [
{
uniqueName: "Country",
},
],
columns: [
{
uniqueName: "Business Type",
},
{
uniqueName: "Measures",
},
],
measures: [
{
uniqueName: "Price",
aggregation: "sum",
},
],
},
};
</script>

<template>
<div>
<Pivot
toolbar
v-bind:report="report"
/>
</div>
</template>

The fields you’ve specified in the report will be shown on the chart.

Step 2. Get a reference to the WebDataRocks instance

Some of WebDataRocks methods and events are needed to create a chart. Using a reference to the WebDataRocks instance, we can access WebDataRocks API.

Get the reference as follows:

<script setup>
// ...
import { ref } from "vue";

const pivotRef = ref(null);

// ...
</script>

<template>
<div>
<Pivot
ref="pivotRef"
toolbar
v-bind:report="report"
/>
</template>

Now it’s possible to interact with the component through pivotRef.value.webdatarocks.

Step 3. Add Highcharts

Step 3.1. Download the Highcharts npm package:

npm install highcharts-vue@1

Note that Vue and the Highcharts package versions must be compatible. Since we are using Vue 2 in our project, we installed the 1.x.x version of the package.

Step 3.2. Import Highcharts into your component and create a reactive variable to store options for the chart (e.g., chartOptions):

// ...
import { Chart } from "highcharts-vue";
// ...
const chartOptions = ref({});
// ...

Step 3.3. In the <template> section of your component, add the Chart component and set its options prop to the reactive variable created in the previous step (e.g., chartOptions):

<template>
<div>
<Pivot
ref="pivotRef"
v-bind:report="report"
toolbar
/>
<Chart
v-bind:options="chartOptions"
/>
</div>
</template>

Step 4. Show the data from the pivot table on the chart

Step 4.1. Import the WebDataRocks Connector for Highcharts:

import "@webdatarocks/webdatarocks/webdatarocks.highcharts.js";

The Connector provides the highcharts.getData() method, which gets data from WebDataRocks and converts it to the format required for a specific chart type.

Step 4.2. If we call the highcharts.getData() method before WebDataRocks is fully loaded and ready to use, it will return an empty result. To know when WebDataRocks is ready to provide data for the chart, handle the reportcomplete event:

<script setup>
// ...

function reportComplete () {
// Unsubscribing from reportcomplete
// We need it only to track the initialization of WebDataRocks
pivotRef.value.webdatarocks.off("reportcomplete");
createChart();
}
</script>

<template>
<div>
<Pivot
ref="pivotRef"
v-bind:report="report"
v-bind:reportcomplete="reportComplete"
toolbar
/>
<Chart
v-bind:options="chartOptions"
/>
</div>
</template>

Now the chart will be created only when the data is loaded and the report is ready.

Step 4.3. Implement the createChart() function. It will use the highcharts.getData() method from the Connector:

function createChart () {
pivotRef.value.webdatarocks.highcharts.getData(
{
type: "spline",
},
// Function called when data for the chart is ready
(data) => {
chartOptions.value = data;
},
// Function called on report changes (filtering, sorting, etc.)
(data) => {
chartOptions.value = data;
}
);
}

Step 5. Run the project

Run your project with the following command:

npm run dev

Open http://localhost:5173/ in the browser to see how the pivot table looks in combination with Highcharts.

To see what a real-time interaction is, try experimenting: filter the data, change the measures and the aggregation functions — the results are reflected on the chart at once.

Check out the full code

After completing this tutorial, the full code of the component should look as follows:

<script setup>
import { Pivot } from "@webdatarocks/vue-webdatarocks";
import "@webdatarocks/webdatarocks/webdatarocks.css";
import { ref } from "vue";
import { Chart } from "highcharts-vue";
import "@webdatarocks/webdatarocks/webdatarocks.highcharts.js";

const report = {
dataSource: {
filename: "https://cdn.webdatarocks.com/data/data.csv",
},
slice: {
rows: [
{
uniqueName: "Country",
},
],
columns: [
{
uniqueName: "Business Type",
},
{
uniqueName: "Measures",
},
],
measures: [
{
uniqueName: "Price",
aggregation: "sum",
},
],
},
};

const pivotRef = ref(null);

const chartOptions = ref({});

function reportComplete () {
pivotRef.value.webdatarocks.off("reportcomplete");
createChart();
}

function createChart () {
pivotRef.value.webdatarocks.highcharts.getData(
{
type: "spline",
},
// Function called when data for the chart is ready
(data) => {
chartOptions.value = data;
},
// Function called on report changes (filtering, sorting, etc.)
(data) => {
chartOptions.value = data;
}
);
}
</script>

<template>
<div>
<Pivot
ref="pivotRef"
v-bind:report="report"
v-bind:reportcomplete="reportComplete"
toolbar
/>
<Chart
v-bind:options="chartOptions"
/>
</div>
</template>

See also