From e708ab45a53496c138dc646163ae9e10647a3155 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Sat, 3 Nov 2018 22:24:37 -0400 Subject: [PATCH] multiple pies renderer --- src/PlotlyRenderers.jsx | 44 ++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/PlotlyRenderers.jsx b/src/PlotlyRenderers.jsx index 224f1aa..4fb4e7f 100644 --- a/src/PlotlyRenderers.jsx +++ b/src/PlotlyRenderers.jsx @@ -48,8 +48,13 @@ function makeRenderer( labels.push(datumKey.join('-') || ' '); } const trace = {name: traceKey.join('-') || fullAggName}; - trace.x = transpose ? values : labels; - trace.y = transpose ? labels : values; + if (traceOptions.type === 'pie') { + trace.values = values; + trace.labels = labels.length > 1 ? labels : [fullAggName]; + } else { + trace.x = transpose ? values : labels; + trace.y = transpose ? labels : values; + } return Object.assign(trace, traceOptions); }); @@ -74,15 +79,34 @@ function makeRenderer( width: window.innerWidth / 1.5, height: window.innerHeight / 1.4 - 50, /* eslint-enable no-magic-numbers */ - xaxis: { + }; + + if (traceOptions.type === 'pie') { + const columns = Math.ceil(Math.sqrt(data.length)); + const rows = Math.ceil(data.length / columns); + layout.grid = {columns, rows}; + data.forEach((d, i) => { + d.domain = { + row: Math.floor(i / columns), + column: i - columns * Math.floor(i / columns), + }; + if (data.length > 1) { + d.title = d.name; + } + }); + if (data[0].labels.length === 1) { + layout.showlegend = false; + } + } else { + layout.xaxis = { title: transpose ? fullAggName : null, automargin: true, - }, - yaxis: { + }; + layout.yaxis = { title: transpose ? null : fullAggName, automargin: true, - }, - }; + }; + } return (