3 votes

JFreechart : Affichage de l'axe X avec des valeurs après des unités spécifiques

Je suis en train d'utiliser jfreechart pour afficher un graphique linéaire.Maintenant, sur l'axe X, il montre la valeur pour chaque paire (x,y) sur le graphique.En conséquence, l'axe X a une quantité énorme de valeurs qui se chevauchent.Je veux afficher quelques valeurs par exemple après toutes les 5 unités ou quelque chose comme ça.Comment est-ce possible en utilisant Jfreechart.

3voto

Modus Tollens Points 4099

Avant le NumberAxis Lorsque le graphique est dessiné, ses repères sont actualisés. Le résultat est un List qui comprend un NumberTick pour chaque marque de tic-tac de l'axe.

En surchargeant la fonction NumberAxis.refreshTicks vous pouvez contrôler comment et si les marques seront affichées.

Par exemple, dans le code suivant, je récupère toutes les marques de tic-tac et je les parcours en recherchant les éléments suivants TickType.MAJOR . Si la valeur d'un repère majeur n'est pas divisible par 5, il est remplacé par un repère mineur.

Par conséquent, seules les valeurs divisibles par 5 seront affichées avec leur libellé.

XYPlot plot = (XYPlot) chart.getPlot();

NumberAxis myAxis = new NumberAxis(plot.getDomainAxis().getLabel()) {
  @Override
  public List refreshTicks(Graphics2D g2, AxisState state,
                           Rectangle2D dataArea, RectangleEdge edge) {

    List allTicks = super.refreshTicks(g2, state, dataArea, edge);
    List myTicks = new ArrayList();

    for (Object tick : allTicks) {
      NumberTick numberTick = (NumberTick) tick;

      if (TickType.MAJOR.equals(numberTick.getTickType()) &&
                    (numberTick.getValue() % 5 != 0)) {
        myTicks.add(new NumberTick(TickType.MINOR, numberTick.getValue(), "",
                    numberTick.getTextAnchor(), numberTick.getRotationAnchor(),
                    numberTick.getAngle()));
        continue;
      }
      myTicks.add(tick);
    }
    return myTicks;
  }
};

plot.setDomainAxis(myAxis);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X