@@ -393,20 +393,26 @@ function drawTexts(g, gd, legendObj) {
393393 var isEditable = ! legendObj . _inHover && gd . _context . edits . legendText && ! isPieLike ;
394394 var maxNameLength = legendObj . _maxNameLength ;
395395
396- var name ;
397- if ( ! legendObj . entries ) {
398- name = isPieLike ? legendItem . label : trace . name ;
399- if ( trace . _meta ) {
400- name = Lib . templateString ( name , trace . _meta ) ;
401- }
396+ var name , font ;
397+ if ( legendItem . groupTitle ) {
398+ name = legendItem . groupTitle . text ;
399+ font = legendItem . groupTitle . font ;
402400 } else {
403- name = legendItem . text ;
401+ font = legendObj . font ;
402+ if ( ! legendObj . entries ) {
403+ name = isPieLike ? legendItem . label : trace . name ;
404+ if ( trace . _meta ) {
405+ name = Lib . templateString ( name , trace . _meta ) ;
406+ }
407+ } else {
408+ name = legendItem . text ;
409+ }
404410 }
405411
406412 var textEl = Lib . ensureSingle ( g , 'text' , 'legendtext' ) ;
407413
408414 textEl . attr ( 'text-anchor' , 'start' )
409- . call ( Drawing . font , legendObj . font )
415+ . call ( Drawing . font , font )
410416 . text ( isEditable ? ensureLength ( name , maxNameLength ) : name ) ;
411417
412418 var textGap = legendObj . itemwidth + constants . itemGap * 2 ;
@@ -512,7 +518,15 @@ function computeTextDimensions(g, gd, legendObj, aTitle) {
512518 var mathjaxNode = mathjaxGroup . node ( ) ;
513519 if ( ! legendObj ) legendObj = gd . _fullLayout . legend ;
514520 var bw = legendObj . borderwidth ;
515- var lineHeight = ( aTitle === MAIN_TITLE ? legendObj . title : legendObj ) . font . size * LINE_SPACING ;
521+ var font ;
522+ if ( aTitle === MAIN_TITLE ) {
523+ font = legendObj . title . font ;
524+ } else if ( legendItem . groupTitle ) {
525+ font = legendItem . groupTitle . font ;
526+ } else {
527+ font = legendObj . font ;
528+ }
529+ var lineHeight = font . size * LINE_SPACING ;
516530 var height , width ;
517531
518532 if ( mathjaxNode ) {
@@ -549,8 +563,14 @@ function computeTextDimensions(g, gd, legendObj, aTitle) {
549563 bw + lineHeight
550564 ) ;
551565 } else { // legend item
566+ var x = constants . itemGap * 2 + legendObj . itemwidth ;
567+ if ( legendItem . groupTitle ) {
568+ x = constants . itemGap ;
569+ width -= legendObj . itemwidth ;
570+ }
571+
552572 svgTextUtils . positionText ( textEl ,
553- legendObj . itemwidth + constants . itemGap * 2 ,
573+ x ,
554574 - lineHeight * ( ( textLines - 1 ) / 2 - 0.3 )
555575 ) ;
556576 }
0 commit comments