Last active
December 21, 2021 22:00
-
-
Save slopp/131ab732f759462c1822c2f3d4a9780e to your computer and use it in GitHub Desktop.
test of d3 custom viz for looker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.violin=t():e.violin=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t){function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}looker.plugins.visualizations.add({id:"violin",label:"Violin Plot",create:function(e,t){this._svg=d3v4.select(e).append("svg")},update:function(e,t,r,o){if(handleErrors(this,o,{min_pivots:0,max_pivots:0,min_dimensions:1,max_dimensions:1,min_measures:1,max_measures:1})){var a=d3v4,u=t.clientWidth,l=t.clientHeight,s=(o.fields.dimension_like[0],o.fields.measure_like[0]);formatType(s.value_format),a.scaleOrdinal().range(r.color_range),e.forEach((function(e){group=e[dim.name].value,value=e[s.name].value}));var c=e.map((function(e){return e.group})),f=n(new Set(c)),d=e.map((function(e){return e.value})),p=[0,a.max(d)+.1*a.max(d)],m=this._svg.html("").attr("width","100%").attr("height","100%").append("g").attr("transform","translate(0,16)"),v=a.scaleLinear().domain(p).range([l,0]);m.append("g").call(a.axisLeft(v));var g=a.scaleBand().range([0,u]).domain(f).padding(.05);m.append("g").attr("transform","translate(0,"+l+")").call(a.axisBottom(g));var y=a.histogram().domain(v.domain()).thresholds(v.ticks(20)).value((function(e){return e})),b=a.nest().key((function(e){return e.group})).rollup((function(e){return input=e.map((function(e){return e.value})),bins=y(input),bins})).entries(e),h=0;for(i in b)allBins=b[i].value,lengths=allBins.map((function(e){return e.length})),longuest=a.max(lengths),longuest>h&&(h=longuest);var x=a.scaleLinear().range([0,g.bandwidth()]).domain([-h,h]),_=a.scaleSequential().interpolator(a.interpolateInferno).domain([3,9]);m.selectAll("myViolin").data(b).enter().append("g").attr("transform",(function(e){return"translate("+g(e.key)+" ,0)"})).append("path").datum((function(e){return e.value})).style("stroke","none").style("fill","grey").attr("d",a.area().x0(x(0)).x1((function(e){return x(e.length)})).y((function(e){return v(e.x0)})).curve(a.curveCatmullRom)),m.selectAll("indPoints").data(e).enter().append("circle").attr("cx",(function(e){return g(e.group)+g.bandwidth()/2-40*Math.random()})).attr("cy",(function(e){return v(e.value)})).attr("r",5).style("fill",(function(e){return _(e.value)})).attr("stroke","white"),done()}}})}])})); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment