nline / nline-plotlyjs-panel

Plotly.js for Grafana
https://grafana.com/grafana/plugins/nline-plotlyjs-panel/
Apache License 2.0
37 stars 3 forks source link
grafana plotly plotlyjs plugin

Plotly Panel for Grafana

Marketplace Downloads

Create advanced, interactive charts in Grafana using Plotly.js.

Key Features

For a complete list of recent updates, please refer to our changelog.

Getting Started

The Plotly Panel, developed by nLine, offers enhanced control over data visualization in Grafana. It uses a component-based approach, allowing you to modify chart elements independently without complex JavaScript interactions.

Panel Structure

The panel configuration consists of five main components:

  1. allData: Applied across all traces on the Plotly chart
  2. data: Defines the chart's data series (traces)
  3. layout: Controls the chart's appearance and axes
  4. config: Sets chart-wide options
  5. frames: (Optional) For animated charts

These components follow the Plotly.js schema. You can configure them using YAML or JSON in the panel options.

Data Transformation

You can transform your data before rendering using a custom script. The script has access to:

Context Variables

The script has access to several context variables that provide useful information and functionality:

variables

This object contains Grafana's dashboard variables and native Grafana variables. Native variables take precedence over dashboard variables with the same name.

Key native variables include:

utils

The utils object provides several utility functions and services to assist with data manipulation and panel interactions:

Example usage of utils:

Processing Script

The script must return an object that defines the chart configuration. This object can include one or more of the following properties:

Note: The data and frames properties should be arrays of objects. The "Cross-trace Data" field can be an object, which will apply the parameters to all returned traces in the Script section. Objects are merged with script objects given priority (e.g., data from script > allData > data).

The script is defined in the "Processing Script" editor.

// Example: Basic timeseries plot
const { data, variables, options, utils } = arguments;
let series = data.series[0];
let x = series.fields[0];
let y = series.fields[1];

return {
  data: [
    {
      x: x.values || x.values.buffer,
      y: y.values || y.values.buffer,
      type: 'scatter',
      mode: 'lines',
      name: x.name,
    },
  ],
  layout: {
    xaxis: { title: x.name },
    yaxis: { title: y.name },
  },
};

On-click Event Handling

The panel supports click, select, and zoom events. You can define custom behavior for these events using the "On-event Trigger" editor.

// Event handling
const { type: eventType, data: eventData } = event;
const { timeZone, dayjs, locationService, getTemplateSrv } = utils;

switch (eventType) {
  case 'click':
    console.log('Click event:', eventData.points);
    break;
  case 'select':
    console.log('Selection event:', eventData.range);
    break;
  case 'zoom':
    console.log('Zoom event:', eventData);
    break;
}

Screenshots

For screenshots, please see the src/img folder.