docs: private void initGraphics() {
          // Set initial size
          if (Double.compare(gauge.getPrefWidth(), 0.0) <= 0 || Double.compare(gauge.getPrefHeight(), 0.0) <= 0 ||
              Double.compare(gauge.getWidth(), 0.0) <= 0 || Double.compare(gauge.getHeight(), 0.0) <= 0) {
              if (gauge.getPrefWidth() > 0 && gauge.getPrefHeight() > 0) {
                  gauge.setPrefSize(gauge.getPrefWidth(), gauge.getPrefHeight());
              } else {
                  gauge.setPrefSize(PREFERRED_WIDTH, PREFERRED_HEIGHT);
              }
          }
  
          graphBounds = new Rectangle(PREFERRED_WIDTH * 0.05, PREFERRED_HEIGHT * 0.5, PREFERRED_WIDTH * 0.9, PREFERRED_HEIGHT * 0.45);
  
          titleText = new Text(gauge.getTitle());
          titleText.setFill(gauge.getTitleColor());
          Helper.enableNode(titleText, !gauge.getTitle().isEmpty());
  
          valueText = new Text(String.format(locale, formatString, gauge.getValue()));
          valueText.setFill(gauge.getValueColor());
          Helper.enableNode(valueText, gauge.isValueVisible());
  
          unitText = new Text(gauge.getUnit());
          unitText.setFill(gauge.getUnitColor());
          Helper.enableNode(unitText, !gauge.getUnit().isEmpty());
  
          averageText = new Text(String.format(locale, formatString, gauge.getAverage()));
          averageText.setFill(gauge.getAverageColor());
          Helper.enableNode(averageText, gauge.isAverageVisible());
  
          highText = new Text();
          highText.setTextOrigin(VPos.BOTTOM);
          highText.setFill(gauge.getValueColor());
  
          lowText = new Text();
          lowText.setTextOrigin(VPos.TOP);
          lowText.setFill(gauge.getValueColor());
  
          subTitleText = new Text(gauge.getSubTitle());
          subTitleText.setTextOrigin(VPos.TOP);
          subTitleText.setFill(gauge.getSubTitleColor());
  
          stdDeviationArea = new Rectangle();
          Helper.enableNode(stdDeviationArea, gauge.isAverageVisible());
  
          averageLine = new Line();
          averageLine.setStroke(gauge.getAverageColor());
          averageLine.getStrokeDashArray().addAll(PREFERRED_WIDTH * 0.005, PREFERRED_WIDTH * 0.005);
          Helper.enableNode(averageLine, gauge.isAverageVisible());
  
          pathElements = new ArrayList<>(noOfDatapoints);
          pathElements.add(0, new MoveTo());
          for (int i = 1 ; i < noOfDatapoints ; i++) { pathElements.add(i, new LineTo()); }
  
          sparkLine = new Path();
          sparkLine.getElements().addAll(pathElements);
          sparkLine.setFill(null);
          sparkLine.setStroke(gauge.getBarColor());
          sparkLine.setStrokeWidth(PREFERRED_WIDTH * 0.0075);
          sparkLine.setStrokeLineCap(StrokeLineCap.ROUND);
          sparkLine.setStrokeLineJoin(StrokeLineJoin.ROUND);
  
          dot = new Circle();
          dot.setFill(gauge.getBarColor());
  
          pane = new Pane(titleText, valueText, unitText, stdDeviationArea, averageLine, sparkLine, dot, averageText, highText, lowText, subTitleText);
          pane.setBorder(new Border(new BorderStroke(gauge.getBorderPaint(), BorderStrokeStyle.SOLID, new CornerRadii(PREFERRED_WIDTH * 0.025), new BorderWidths(gauge.getBorderWidth()))));
          pane.setBackground(new Background(new BackgroundFill(gauge.getBackgroundPaint(), new CornerRadii(PREFERRED_WIDTH * 0.025), Insets.EMPTY)));
  
          getChildren().setAll(pane);
      }