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.
Réponse
Trop de publicités?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);