• Getting Started

  • Data

  • Chart Types

  • Chart Elements

  • Integrations

  • API

  • Tools

  • FAQ

  • Change Log

  • Selection Tool

    This module will allow you to drag and highlight nodes on your chart. Because it's a module, it won't take up any KB on your page unless you are using it. Let's get to why you came here and tell you how it all works.

    How To Include The Module

    There are two ways to include the module:

    1. You must first point the MODULES directory path, in the zingchart global object, to the appropriate modules folder.
    <script src="cdn.zingchart.com/zingchart.min.js"></script>  
    <script> zingchart.MODULESDIR = "https://cdn.zingchart.com/modules/";</script>
    

    Load the module using zingchart.loadModules([],fnc). The callback function will be executed upon the script request arriving.

    // Load the selection-tool and render the chart once its loaded
    zingchart.loadModules('selection-tool', function() {
      zingchart.render({
        id: 'myChart',
        data: myConfig,
        height: 400,
        width: '100%',
        modules: 'selection-tool'
      });
    });
    
    1. The alternative is to include the script tag directly in the DOM
    <script src= "cdn.zingchart.com/zingchart.min.js"></script>  
    <script src= "cdn.zingchart.com/modules/zingchart-selection-tool.min.js"></script>
    

    How To Style Nodes

    If you don't know much about selecting nodes in ZingChart, you should probably read up on the selected-state attribute first. You must apply some sort of selection styling to your chart for the selection tool to work.

    For bar charts, you would style something similar to this:

    plot: {  
      selectedState: {
        backgroundColor: 'red'
      }
    }
    

    For line charts, you would style something similar to this:

    plot: {  
      selectedState: {
        lineColor: 'red'
      },
      // for line marker (nodes)
      selectedMarker: {
        backgroundColor: 'red'
      }
    }
    

    How To Select Nodes

    1. Click + Drag to create rectangular selections
    2. (Ctrl/Cmnd) + (Click & Drag) to create free form selections.

    Styling

    You can style the mask of the selection area itself with the following attributes.

    selectionTool: {  
      mask: {
        borderWidth: 2,
        borderColor: "red", // works for (ctrl/cmnd + click) line color
        backgroundColor: "yellow",
        alpha: 0.5
      }
    }
    

    Other Attributes

    Append

    To append selection for specified plot, use the dataAppendSelection attribute. Otherwise, the previous selection is cleared.

    {
      plot: {
        dataAppendSelection: true // set all plots to append selection
      },
      data: [{
        values: ...
        dataAppendSelection: true // specify single plot to append selection
      }]
    }
    
    https://app.zingsoft.com/demos/embed/D4FNA66S
    https://app.zingsoft.com/demos/embed/D4FNA66S

    Group

    To group select of all nodes within the same scale key, set groupSelections to true. Note that selectionMode and selectedState are required to set in order for groupSelections to work properly.

    {
      plot: {
        selectionMode: 'graph',
        groupSelections: true,
      }
    }
    
    https://app.zingsoft.com/demos/embed/L6GUZIH0
    https://app.zingsoft.com/demos/embed/L6GUZIH0

    Ignore

    If you don't want to include a certain plot in your selection tool, use the data-ignore-selection attribute on that plot.

    {
      plot: {
        dataIgnoreSelection: true // set all plots to ignore selection
      },
      data: [{
        values: ...
        dataIgnoreSelection: true // specify single plot to ignore selection
      }]
    }
    
    https://app.zingsoft.com/demos/embed/ENY75PUO
    https://app.zingsoft.com/demos/embed/ENY75PUO

    Hello World Demo

    https://app.zingsoft.com/demos/embed/2A1LW3IU
    https://app.zingsoft.com/demos/embed/2A1LW3IU

    How To Use The API

    You must register the following code to receive the callback:

    zingchart.bind('myChart', 'zingchart.plugins.selection-tool.selection', function(e) {  
      ...
    });
    

    The API callback parameter e returns the following object:

    {
      ev:MouseEvent
      graphid: "myChart-graph-id0"
      id: "myChart"
      nodes: Array[115] // selected node objects
      plotarea:  true
      selection:Array[2] // selected noded indices by plot
      target: "none"
      targetid: "myChart-text-top"
      touch: false
      x: 957
      y: 248
    }
    

    1) Display Selected Values

    You can use this information to display say, minValue, maxValue, sumtotal, etc. to your users.

    https://app.zingsoft.com/demos/embed/KPE6OUV3
    https://app.zingsoft.com/demos/embed/KPE6OUV3

    2) Change Tooltip

    Additionally, the tooltip of the selected nodes can be changed to display various information. The appropriate syntax is:

    tooltip: {
      selectedState: {
        text: series1Text
      }
    }
    

    In the following example, I aggregate each plot to display the sum of all values selected in that plot.

    https://app.zingsoft.com/demos/embed/MU2UZ4XK
    https://app.zingsoft.com/demos/embed/MU2UZ4XK

    3) Selection Drilldown

    You can display a new chart based on the data you have selected from your current chart. I'm using the ZingChart API to update values on the second chart.

    // update the second chart
    zingchart.exec('selectionChart', 'setseriesdata', {  
      data: newSeriesData
    });
    
    https://app.zingsoft.com/demos/embed/8CBYYXLY
    https://app.zingsoft.com/demos/embed/8CBYYXLY

    4) Render A Grid

    You can even render a grid based on the selection you have made. In this example, I created a bootstrap table based on this documentation.

    https://app.zingsoft.com/demos/embed/X51CU30K
    https://app.zingsoft.com/demos/embed/X51CU30K

    How To Clear Selection

    It's very easy. Make a call to the clearselection API method. Now let's incorporate this into the chart by adding the function to the context menu. Let's create a place to store our function. Typically it is not recommended to modify the ZingChart object. This is for advanced users. It is good practice to keep all your charting stuff together, in this case your custom functions within the ZingChart object! This will also help with name collisions within the window object.

    BE WARNED: You can overwrite stuff in the ZingChart object if you are not careful. Use with caution.

    zingchart.insert_company_name_customFncs = {};  
    zingchart.insert_company_name_customFncs.clearSelection = function(e) {  
      zingchart.exec(e.id,'clearselection');
    }
    
    // Load the selection-tool and render the chart once the module is loaded
    zingchart.loadModules('selection-tool', function() {  
        zingchart.render({
            id: 'myChart',
            // defined data this way since context menu needs to be defined in root (above graphset)
            data: { 
              gui: {
                contextMenu: {
                  customItems: [
                    {
                      text: 'Clear Selection',
                      function: 'zingchart.insert_company_name_customFncs.clearSelection()',
                      id: 'clearSelection'
                    }
                  ]
                }
              },
              graphset: [myConfig]
            },
            height: 400,
            width: '100%',
            modules: 'selection-tool'
        });
    });
    
    https://app.zingsoft.com/demos/embed/1P88SY7A
    https://app.zingsoft.com/demos/embed/1P88SY7A

    Chart Types

    The selection tool makes a lot of sense for scatter plots, but let's see it in action on a couple other chart types to convince you this plugin works on almost all charts.

    Bar Chart

    https://app.zingsoft.com/demos/embed/173JAZ3X
    https://app.zingsoft.com/demos/embed/173JAZ3X

    Radar Chart

    https://app.zingsoft.com/demos/embed/LDN2LFN6
    https://app.zingsoft.com/demos/embed/LDN2LFN6

    Mixed Chart

    If you don't want to include a certain plot in your selection, use the data-ignore-selection attribute on that plot.

    https://app.zingsoft.com/demos/embed/R32EAYQB
    https://app.zingsoft.com/demos/embed/R32EAYQB