Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
stanlyrj
Contributor III
Contributor III

How to make selections in bar chart extension(d3.js)

Hi Everyone,

Here I'm trying to develop bar chart extension using d3.v3.js. I have succeeded in drawing the bar chart. But I'm facing some issues in making the bar chart selections.
1. When user selects a dimension the chart does not get updated (User needs to click outside to reflect to update the graph )

0.PNG

2.  If one dimension is selected, the bar associated with it is not displayed properly.

2.PNG

3.PNG

I have attached a sample data app and extension files with question.

Here's the code I have used for the extension:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

define( [ "qlik", "./d3.v3.min", "css!./style.css"],

function ( qlik, d3) {

return {

initialProperties : {

qHyperCubeDef : {

qDimensions : [],

qMeasures : [],

qInitialDataFetch : [{

qWidth : 4,

qHeight : 1000

}]

}

},

definition:{

type : "items",

        component : "accordion",

        items : {

            dimensions : {

                uses : "dimensions",

                min : 1,

                max : 1

            },

            measures : {

                uses : "measures",

                min : 1,

                max : 2

            },

            sorting : {

                uses : "sorting"

            },

            settings : {

                uses : "settings",

                items: {

                    general: {

                        type: "items",

                        label: "General",

}

}

},

},

},

support : {

snapshot: true,

export: true,

exportData : false

},

paint: function ($element, layout) {

var self= this;

var qMatrix = layout.qHyperCube.qDataPages[0].qMatrix;

           

             var dimensionLabels = layout.qHyperCube.qDimensionInfo.map(function(d) {

              return d.qFallbackTitle;

            });

           

            var measureLabels = layout.qHyperCube.qMeasureInfo.map(function(d) {

          return d.qFallbackTitle;

          });

            var data = qMatrix.map(function (d){

              return {

                "Dim1":d[0].qText,

                "Metric1":d[1].qNum,

"Index":d[0].qElemNumber

              }

            });

            var width = $element.width();

            var height = $element.height();

            var id = "container_" + layout.qInfo.qId;

            if(document.getElementById(id)){

            $("#" + id).empty();

           

            }

            else{

$element.append($('<div />').attr("id", id).width(width).height(height));

            }

viz(width,height,id,data,measureLabels,dimensionLabels,self,d3);

return qlik.Promise.resolve();

}

};

} );

var viz = function(width,height,id,data,measureLabels,dimensionLabels,self,d3){

var margin = {top: 20, right: 30, bottom: 70, left: 40},

    width = width - margin.left - margin.right,

height = height - margin.top - margin.bottom;

var x = d3.scale.ordinal().rangeRoundBands([0, width], 0.1, 0.2);

var y = d3.scale.linear()

.range([height, 0]);

var svg = d3.select("#"+id).append("svg")

.attr("width", width + margin.left + margin.right)

.attr("height", height + margin.top + margin.bottom)

.append("g")

.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

x.domain(data.map(function(d) { return d.Dim1; }));

y.domain([0, d3.max(data, function(d) { return d.Metric1; })]);

svg.append("g")

  .attr("class", "x axis")

  .attr("transform", "translate(0," + height + ")")

  .call(d3.svg.axis().scale(x).orient("bottom"));

svg.append("g")

  .attr("class", "y axis")

  .call(d3.svg.axis().scale(y).orient("left"));

svg.selectAll(".bar")

  .data(data)

.enter().append("rect")

  .attr("class", "bar")

  .attr("id",function(d){ return d.Index;})

  .attr("x", function(d) { return x(d.Dim1); })

  .attr("width", x.rangeBand())

  .attr("y", function(d) { return y(d.Metric1); })

  .attr("height", function(d) { return height - y(d.Metric1); })

  .on('click', function(d,i){

console.log("on-click");

var value = parseInt(d3.select(this).attr("id"),10), dim = 0;

self.selectValues(dim, [value], true);

});

!

};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Any help is greatly appreciated.

Thank You

Stan

0 Replies