Skip to content

Instantly share code, notes, and snippets.

@slopp
Last active December 21, 2021 22:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slopp/131ab732f759462c1822c2f3d4a9780e to your computer and use it in GitHub Desktop.
Save slopp/131ab732f759462c1822c2f3d4a9780e to your computer and use it in GitHub Desktop.
test of d3 custom viz for looker
!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