code: func dotNode(rpt *Report, maxFlat float64, rIndex int, n *node) string {
  	flat, cum := n.flat, n.cum
  
  	labels := strings.Split(n.info.prettyName(), "::")
  	label := strings.Join(labels, `\n`) + `\n`
  
  	flatValue := rpt.formatValue(flat)
  	if flat > 0 {
  		label = label + fmt.Sprintf(`%s(%s)`,
  			flatValue,
  			strings.TrimSpace(percentage(flat, rpt.total)))
  	} else {
  		label = label + "0"
  	}
  	cumValue := flatValue
  	if cum != flat {
  		if flat > 0 {
  			label = label + `\n`
  		} else {
  			label = label + " "
  		}
  		cumValue = rpt.formatValue(cum)
  		label = label + fmt.Sprintf(`of %s(%s)`,
  			cumValue,
  			strings.TrimSpace(percentage(cum, rpt.total)))
  	}
  
  	// Scale font sizes from 8 to 24 based on percentage of flat frequency.
  	// Use non linear growth to emphasize the size difference.
  	baseFontSize, maxFontGrowth := 8, 16.0
  	fontSize := baseFontSize
  	if maxFlat > 0 && flat > 0 && float64(flat) <= maxFlat {
  		fontSize += int(math.Ceil(maxFontGrowth * math.Sqrt(float64(flat)/maxFlat)))
  	}
  	return fmt.Sprintf(`N%d [label="%s" fontsize=%d shape=box tooltip="%s (%s)"]`,
  		rIndex,
  		label,
  		fontSize, n.info.prettyName(), cumValue)
  }
docs: // dotNode generates a graph node in DOT format.