docs: @Override protected void initGraphics() {
          super.initGraphics();
  
          poiLocations       = FXCollections.observableHashMap();
          chartDataLocations = FXCollections.observableHashMap();
  
          handlerMap       = new HashMap<>();
          circleHandlerMap = new HashMap<>();
  
          countryPaths = tile.getCountryPaths();
  
          String formatString = new StringBuilder("%.").append(tile.getDecimals()).append("f").toString();
  
          poiListener = new WeakListChangeListener<>(change -> {
              while (change.next()) {
                  if (change.wasAdded()) {
                      change.getAddedSubList().forEach(addedPoi -> {
                          String tooltipText = new StringBuilder(addedPoi.getName()).append("\n")
                                                                                    .append(addedPoi.getInfo())
                                                                                    .toString();
                          EventHandler<MouseEvent> handler = e -> addedPoi.fireLocationEvent(new LocationEvent(addedPoi));
                          Circle circle = new Circle(3, addedPoi.getColor());
                          Tooltip.install(circle, new Tooltip(tooltipText));
                          circleHandlerMap.put(circle, handler);
                          poiLocations.put(addedPoi, circle);
                          circle.setOnMousePressed(handler);
                          getPane().getChildren().add(circle);
                      });
                  } else if (change.wasRemoved()) {
                      change.getRemoved().forEach(removedPoi -> {
                          if (circleHandlerMap.get(removedPoi) != null) {
                              poiLocations.get(removedPoi).removeEventHandler(MouseEvent.MOUSE_PRESSED, circleHandlerMap.get(removedPoi));
                          }
                          getPane().getChildren().remove(removedPoi);
                      });
                  }
              }
              resize();
          });
          chartDataListener = new WeakListChangeListener<>(change -> {
              while (change.next()) {
                  if (change.wasAdded()) {
                      change.getAddedSubList().forEach(addedData -> {
                          String tooltipText = new StringBuilder(addedData.getName()).append("\n")
                                                                                     .append(String.format(Locale.US, formatString, addedData.getValue()))
                                                                                     .toString();
                          EventHandler<MouseEvent> handler = e -> tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, addedData));
                          Circle circle = new Circle(3, addedData.getLocation().getColor());
                          Tooltip.install(circle, new Tooltip(tooltipText));
                          circleHandlerMap.put(circle, handler);
                          chartDataLocations.put(addedData.getLocation(), circle);
                          circle.setOnMousePressed(handler);
                          getPane().getChildren().add(circle);
                      });
                  } else if (change.wasRemoved()) {
                      change.getRemoved().forEach(removedData -> {
                          if (circleHandlerMap.get(removedData) != null) {
                              chartDataLocations.get(removedData).removeEventHandler(MouseEvent.MOUSE_PRESSED, circleHandlerMap.get(removedData));
                          }
                          getPane().getChildren().remove(removedData);
                      });
                  }
              }
              resize();
          });
  
          tile.getPoiList()
              .forEach(poi -> {
                  String tooltipText = new StringBuilder(poi.getName()).append("\n")
                                                                       .append(poi.getInfo())
                                                                       .toString();
                  Circle circle = new Circle(3, poi.getColor());
                  circle.setOnMousePressed(e -> poi.fireLocationEvent(new LocationEvent(poi)));
                  Tooltip.install(circle, new Tooltip(tooltipText));
                  poiLocations.put(poi, circle);
              });
  
          tile.getChartData()
              .stream()
              .filter(chartData -> chartData.getLocation() != null)
              .forEach(chartData -> {
                  String tooltipText = new StringBuilder(chartData.getName()).append("\n")
                                                                             .append(String.format(Locale.US, formatString, chartData.getValue()))
                                                                             .toString();
                  Circle circle = new Circle(3, chartData.getLocation().getColor());
                  circle.setOnMousePressed(e -> tile.fireTileEvent(new TileEvent(EventType.SELECTED_CHART_DATA, chartData)));
                  Tooltip.install(circle, new Tooltip(tooltipText));
                  chartDataLocations.put(chartData.getLocation(), circle);
              });
  
          titleText = new Text();
          titleText.setFill(tile.getTitleColor());
          Helper.enableNode(titleText, !tile.getTitle().isEmpty());
  
          text = new Text(tile.getUnit());
          text.setFill(tile.getUnitColor());
          Helper.enableNode(text, tile.isTextVisible());
  
          Color fill   = tile.getForegroundColor();
          Color stroke = tile.getBackgroundColor();
  
          worldPane = new Pane();
          countryPaths.forEach((name, pathList) -> {
              Country country = Country.valueOf(name);
              pathList.forEach(path -> {
                  path.setFill(null == country.getColor() ? fill : country.getColor());
                  path.setStroke(stroke);
                  path.setStrokeWidth(0.2);
              });
              worldPane.getChildren().addAll(pathList);
          });
          group = new Group(worldPane);
  
          getPane().getChildren().addAll(group, titleText, text);
          getPane().getChildren().addAll(chartDataLocations.values());
          getPane().getChildren().addAll(poiLocations.values());
      }