IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

[JFreeChart] Gérer l'état du zoom initial


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut [JFreeChart] Gérer l'état du zoom initial
    bonjour,
    je réalise une applet qui trace des graphiques en utilisant la bibliotheque JFREECHART qui gére le zoom.
    L'echelle adoptée automatiquement ne me convenait pas, en effet je voulais que l'axe des ordonnées ne debute pas à 0, j'ai donc utiliser la méthode suivante pour definir le minimum et le maximum de l'axe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot.getRangeAxis(0).setRange(minValue,maxValue);
    Le problème c'est que l'echelle automatique proposée par JFREECHART me ramène à l'ancienne echelle (non corrigée par le code ci-dessus).
    Je voudrais donc savoir comment corriger ca, est ce qu'il faut intervenir sur le code du zoom JFREECHART? et si oui comment y accéder?
    merci.

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Normalement, le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot.getRangeAxis(0).setRange(minValue,maxValue);
    Je viens de faire le test sur un TimeSeriesChart et ça le prend bien en compte.
    Sur quel type de graphe as-tu ce problème ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut
    salut
    ca marche bien chez moi aussi, seulement le probleme c'est que quand tu zoom sur un endroit quelconque du graphe et qu'ensuite tu veux revenir à l'etat initial du zoom tu utilises: clik droit-->echelle automatique-->les 2 axes, ce qui te ramenà un graphique dont l'axe des ordonnées commence à 0.
    il faudrait lorsque tu fais ca, que le bout de code precedemment cité se réexecute pour adapter l'echelle à nouveau.

    PS: le type du graphe est "candlestick" (chandeliers et bougie)

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Désolée, en fait, je n'avais pas bien compris quel était ton problème.
    Maintenant, c'est beaucoup plus clair.
    Par contre, je ne connais pas la solution, si toutefois il y en a une.

    J'ai vu que dans la méthode setRange de NumberAxis, on pouvait désactiver l'auto-range :
    public void setRange(Range range,boolean turnOffAutoRange,boolean notify)
    Sets the range for the axis, if requested, sends an AxisChangeEvent to all registered listeners. As a side-effect, the auto-range flag is set to false (optional).

    Parameters:
    range - the range (null not permitted).
    turnOffAutoRange - a flag that controls whether or not the auto range is turned off.
    notify - a flag that controls whether or not listeners are notified.
    J'ai essayé mais ça ne donne rien.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Par défaut
    ok merci quand meme c_nvy.
    Je pense qu'il faut intervenir sur le code de Jfreechart.
    n'hesitez pas si vous avez des idées.

  6. #6
    Membre habitué

    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Par défaut
    Chez moi ça marche comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CategoryPlot categoryplot = this.getCategoryPlot(); //this = StackedBarChart
    categoryplot.getRangeAxis(0).setAutoRange(false);
    categoryplot.getRangeAxis(0).setRange(minValue, maxValue);

  7. #7
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Ce post remonte à loin mais j'y répond au cas ou quelqu'un en aurait besoin .

    Si tu utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    plot =chart.getXYPlot();
    NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis
    domainAxis.setLowerBound(5);
    domainAxis.setUpperBound(10);
    BRAVO, tu a bien un écart de 5 et de 10 au début et à la fin de ton graphique...
    Mais lorsque tu dézommera tu reviendra au format par défaut

    Idem si tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot.getDomainAxis().setRange(new Range(5,10));
    Ce qu'il faut utiliser pour que ce soit permanent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    domainAxis.setLowerMargin(écart en %);
    domainAxis.setUpperMargin(écart en %)
    Explication :
    http://www.jfree.org/jfreechart/api/...egoryAxis.html

    Si vous avez un graphique qui va de 50 à 100 dans l'axe des X.
    Et si vous voulez que votre graphique affiche de 45 à 110...

    le graphique fait une taille de 50 (100-50);
    on veut un écart de 5 au début et 10 à la fin;
    50*10% = 5 10% = 0.1
    50*20% = 10 20% = 0.2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    domainAxis.setLowerMargin(0.1);
    domainAxis.setUpperMargin(0.2)
    A vous de jouer

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Bonjour,

    j'aimerais te dire que ca ne regle en rien le problème, lorsque tu dézoom l'axe des y est recalculé automatiquement au lieu de garder les valeurs de range

    est ce que quelqu'un aurait une idée sur la question (à part tout recoder lol)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 65
    Par défaut
    Bon pour les gens intéressés, c'est un problème du XYBlockRenderer, vous devez vous même faire votre Renderer et corriger le fait qu'il double les unités des y.

    findRangeBounds(XYDataset dataset)
    drawItem(Graphics2D g2, XYItemRendererState state,
    Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot,
    ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series,
    int item, CrosshairState crosshairState, int pass)

    Voili voilou

  10. #10
    Invité de passage
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Par défaut Vla la solution
    Malgré la date du post, la solution est d’utiliser la méthode setDefaultAutoRange (Range range) (class org.jfree.chart.axis.ValueAxis).

    Si tu fixes ton range alors tu fais par exemple comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xAxis_.setRange (xLower, xUpper);
    yAxis_.setRange (yLower, yUpper);
    xAxis_.setDefaultAutoRange (xAxis_.getRange ());
    yAxis_.setDefaultAutoRange (yAxis_.getRange ());
    ça fonctionne chez moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/08/2008, 18h36
  2. [autozoom] Revenir au zoom initial
    Par LordPeterPan2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/07/2008, 11h40
  3. [JFreechart] gérer espace entre series
    Par franfr57 dans le forum 2D
    Réponses: 2
    Dernier message: 11/06/2008, 12h19
  4. [ODBC] Gérer l'état de machines
    Par mohamed_ali dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/04/2007, 11h21
  5. [SVG] Conserver état du zoom lors du reload
    Par m@t dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 01/03/2006, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo