@@ -48,8 +48,13 @@ function makeRenderer(
48
48
labels . push ( datumKey . join ( '-' ) || ' ' ) ;
49
49
}
50
50
const trace = { name : traceKey . join ( '-' ) || fullAggName } ;
51
- trace . x = transpose ? values : labels ;
52
- trace . y = transpose ? labels : values ;
51
+ if ( traceOptions . type === 'pie' ) {
52
+ trace . values = values ;
53
+ trace . labels = labels . length > 1 ? labels : [ fullAggName ] ;
54
+ } else {
55
+ trace . x = transpose ? values : labels ;
56
+ trace . y = transpose ? labels : values ;
57
+ }
53
58
return Object . assign ( trace , traceOptions ) ;
54
59
} ) ;
55
60
@@ -74,15 +79,34 @@ function makeRenderer(
74
79
width : window . innerWidth / 1.5 ,
75
80
height : window . innerHeight / 1.4 - 50 ,
76
81
/* eslint-enable no-magic-numbers */
77
- xaxis : {
82
+ } ;
83
+
84
+ if ( traceOptions . type === 'pie' ) {
85
+ const columns = Math . ceil ( Math . sqrt ( data . length ) ) ;
86
+ const rows = Math . ceil ( data . length / columns ) ;
87
+ layout . grid = { columns, rows} ;
88
+ data . forEach ( ( d , i ) => {
89
+ d . domain = {
90
+ row : Math . floor ( i / columns ) ,
91
+ column : i - columns * Math . floor ( i / columns ) ,
92
+ } ;
93
+ if ( data . length > 1 ) {
94
+ d . title = d . name ;
95
+ }
96
+ } ) ;
97
+ if ( data [ 0 ] . labels . length === 1 ) {
98
+ layout . showlegend = false ;
99
+ }
100
+ } else {
101
+ layout . xaxis = {
78
102
title : transpose ? fullAggName : null ,
79
103
automargin : true ,
80
- } ,
81
- yaxis : {
104
+ } ;
105
+ layout . yaxis = {
82
106
title : transpose ? null : fullAggName ,
83
107
automargin : true ,
84
- } ,
85
- } ;
108
+ } ;
109
+ }
86
110
87
111
return (
88
112
< PlotlyComponent
@@ -201,5 +225,11 @@ export default function createPlotlyRenderers(PlotlyComponent) {
201
225
'Dot Chart' : makeRenderer ( PlotlyComponent , { mode : 'markers' } , { } , true ) ,
202
226
'Area Chart' : makeRenderer ( PlotlyComponent , { stackgroup : 1 } ) ,
203
227
'Scatter Chart' : makeScatterRenderer ( PlotlyComponent ) ,
228
+ 'Multiple Pie Chart' : makeRenderer (
229
+ PlotlyComponent ,
230
+ { type : 'pie' , scalegroup : 1 , hoverinfo : 'label+value' , textinfo : 'none' } ,
231
+ { } ,
232
+ true
233
+ ) ,
204
234
} ;
205
235
}
0 commit comments