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

Interfaces Graphiques en Java Discussion :

Problème avec les marges de jfreechart


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut Problème avec les marges de jfreechart
    Bonjour,
    voila 3 jours que je suis penché su ce problème et sans résultat. Si vous pouvier me fournir plus de piste ca sera sympa
    Je joindrai le code si demande plus tard
    Le porblème est simple à expliquer. J'utilise jfreechart pour tracer des graphes. Le soucis est que jfreechart laisse une marge entre l'axe des ordonnées et la première barre de mon graphe et cette barre represente 6% de la taille de l"image". Sauf que la taille de l'image varie avec le nombre de données et il possible que mon image aie une largeur supperieur a 1000px ce qui me donne une marge de 600px (tous les calculs sont fait à la main). et ma charte graphique ne me permet pas de voir voir la courbe (il faudra décaler avec l'assenseur pour pouvoir voir la graphe, ce qui est emebetant)

    Voila j'espère avoir été assez clair dans l'explication de mon problème et vous remercie d'avance.

  2. #2
    Membre éclairé Avatar de TrYde
    Homme Profil pro
    Responsable de l'industrialisation logiciel
    Inscrit en
    Juillet 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de l'industrialisation logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 55
    Par défaut
    Bonjour,

    Peux-tu donner plus de précisions quant au problème, je ne vois pas trop le coup des 600 px, car 6% de 1000 c'est plutôt 60 px.

    Je présume que tu travailles avec un BarChart, dans ce cas il faut regarder du coté du BarRenderer. Il est possible d'implémenter sa propre version du renderer qui fera fi des marges latérales, en reprenant le code du renderer par défaut par exemple.

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    je me suis trompé dans le message il y a 10000px dans le graphe.

    Effectivement j'utilise barchart je regarderai mais je te poste mon code pour voir si tu peux trouver une solution. je t'epargne les imports... tu reconnaitra le schéma du site jfreechart.

    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
     
     
    public class BarChart extends ApplicationFrame {
     
     
    	HashMap<String, ArrayList> lstPoints;
     
     
    	private int hauteur = 350;
    	int largeur = 25;
        /**
         * Creates a new demo instance.
         *
         * @param title  the frame title.
         * @throws Exception 
         */
     
        public BarChart( HashMap<String, ArrayList> lstPoints, String title, HttpServletRequest p_request, HttpServletResponse p_response, int size) throws Exception {
     
            super(title);
            this.lstPoints = lstPoints;
            int i = lstPoints.size();
     
            final CategoryDataset dataset = createDatasetIndex(lstPoints);
            final JFreeChart chart = createChart(dataset, p_request, p_response);
            ChartRenderingInfo info = new ChartRenderingInfo();
     
            try {
    			String filename = ServletUtilities.saveChartAsPNG(chart,
    					largeur*size*6, hauteur, info,p_request.getSession());
    			Graphe graphe = this.initImage(p_request, info, filename);
    			p_request.setAttribute("grapheIndex", graphe);
    		} catch (IOException e) {
    			throw new Exception(e.getMessage());
    		}
        }
     
     
        private Graphe initImage(HttpServletRequest request,
    			ChartRenderingInfo info, String filename) {
    		String sMap = ChartUtilities.getImageMap(filename, info);
    		String src = request.getContextPath()
    				+ "/servlet/DisplayChart?filename=" + filename;
    		String useMap = "#" + filename;
     
    		Graphe graphe = new Graphe();
    		graphe.setMap(sMap);
    		graphe.setSrc(src);
    		graphe.setUseMap(useMap);
     
    		return graphe;
    	}
        /**
         * Returns a sample dataset.
         * 
         * @return The dataset.
         */
     
        private CategoryDataset createDatasetIndex(HashMap<String, ArrayList> lstPoints) {
        	final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        	for(String key: lstPoints.keySet()){
            	ArrayList<IndexJournaliers> list = new ArrayList<IndexJournaliers>();
            	list = lstPoints.get(key);
            	for(int i=0; i<list.size(); i++){
            		IndexJournaliers lpe = list.get(i);
            		dataset.addValue(lpe.getActiveEnergyImportTarif1(),"Tarif 1",lpe.getDateAndTime());
            		dataset.addValue(lpe.getActiveEnergyImportTarif2(),"Tarif 2",lpe.getDateAndTime());
            		dataset.addValue(lpe.getActiveEnergyImportTarif3(),"Tarif 3",lpe.getDateAndTime());
            		dataset.addValue(lpe.getActiveEnergyImportTarif4(),"Tarif 4",lpe.getDateAndTime());
            		dataset.addValue(lpe.getActiveEnergyImportTarif5(),"Tarif 5",lpe.getDateAndTime());
            		dataset.addValue(lpe.getActiveEnergyImportTarif6(),"Tarif 6",lpe.getDateAndTime());
            	}
            }
     
            return dataset;
     
        }
     
     
     
        /**
         * Creates a sample chart.
         * 
         * @param dataset  the dataset.
         * 
         * @return The chart.
         */
        private JFreeChart createChart(final CategoryDataset dataset , HttpServletRequest p_request, HttpServletResponse p_response) {
     
            // create the chart...
            final JFreeChart chart = ChartFactory.createBarChart(
                "",         // chart title
                "Date",               // domain axis label
                "kWh",                  // range axis label
                dataset,                  // data
                PlotOrientation.VERTICAL, // orientation
                true,                     // include legend
                true,                     // tooltips?
                false                     // URLs?
            );
     
            // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
     
            // set the background color for the chart...
            chart.setBackgroundPaint(Color.white);
     
     
            // get a reference to the plot for further customisation...
            final CategoryPlot plot = chart.getCategoryPlot();
            plot.setBackgroundPaint(Color.lightGray);
            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);
     
            // set the range axis to display integers only...
            final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
            rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
     
            // disable bar outlines...
            final BarRenderer renderer = (BarRenderer) plot.getRenderer();
            renderer.setDrawBarOutline(false);
     
            final GradientPaint gp0 = new GradientPaint(
                    0.0f, 0.0f, Color.blue, 
                    0.0f, 0.0f, Color.lightGray
                );
                final GradientPaint gp1 = new GradientPaint(
                    0.0f, 0.0f, Color.green, 
                    0.0f, 0.0f, Color.lightGray
                );
                final GradientPaint gp2 = new GradientPaint(
                    0.0f, 0.0f, Color.red, 
                    0.0f, 0.0f, Color.lightGray
                );
     
                final GradientPaint gp3 = new GradientPaint(
                    0.0f, 0.0f, Color.CYAN, 
                    0.0f, 0.0f, Color.lightGray
                );
                final GradientPaint gp4 = new GradientPaint(
                    0.0f, 0.0f, Color.ORANGE, 
                    0.0f, 0.0f, Color.lightGray
                );
                final GradientPaint gp5 = new GradientPaint(
                    0.0f, 0.0f, Color.PINK, 
                    0.0f, 0.0f, Color.lightGray
                );
     
    	        final GradientPaint gp6 = new GradientPaint(
    	            0.0f, 0.0f, Color.MAGENTA, 
    	            0.0f, 0.0f, Color.lightGray
    	        );
                renderer.setSeriesPaint(0, gp0);
                renderer.setSeriesPaint(1, gp1);
                renderer.setSeriesPaint(2, gp2);
                renderer.setSeriesPaint(3, gp3);
                renderer.setSeriesPaint(4, gp4);
                renderer.setSeriesPaint(5, gp5);
                renderer.setSeriesPaint(6, gp6);
     
     
            final CategoryAxis domainAxis = plot.getDomainAxis();
            domainAxis.setCategoryLabelPositions(
                CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
            );
            // OPTIONAL CUSTOMISATION COMPLETED.
     
            return chart;
     
        }
     
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut La solution!!
    Apres de longues recherches et une perieuse décortication de la doc de l'API, j'ai trouvé la solution je vous l'expose:
    Pour controler les Marges il faut programmer les axes avec la classe CategoryAxis il faut rajouter a mon code précedent quelque part au niveau de la cotumisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
           final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
            rangeAxis.setStandardTickUnits( NumberAxis.createIntegerTickUnits());
     
            //On rajoute ses trois ligne
            CategoryAxis axe = plot.getDomainAxis();
            axe.setLowerMargin(0.0D);//Pour la marge entre le premier terme et l'axe
            axe.setUpperMargin(0.01);//Pour la marge entre le dernier element et la fin du graphe
    //CQFD
     
            // disable bar outlines...
            final BarRenderer renderer = (BarRenderer) plot.getRenderer();
            //renderer.setDrawBarOutline(false);

  5. #5
    Membre éclairé Avatar de TrYde
    Homme Profil pro
    Responsable de l'industrialisation logiciel
    Inscrit en
    Juillet 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de l'industrialisation logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 55
    Par défaut
    Je suis étonné car dans le BarRenderer il était aussi question de lowerMargin et upperMargin... Cependant la doc n'est pas très claire quant à leur utilisation.

    PS: N'oublies pas

Discussions similaires

  1. Balise <input> : problème avec les marges intérieures
    Par smuller dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/02/2010, 15h23
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 10h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 17h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 16h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 10h59

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