Courbe d'évolution - JFreeChart

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Courbe d'évolution - JFreeChart

Camila
Bonjour,

En m'inspirant de votre code posté l'autre jour, pour utiliser la bibliothèque JFreeChart pour sortir des graphiques, je souhaiterais développer un code qui me permette de représenter l'évolution de la densité entre 2027 et 2067, à l'échelle de l'agglomération (tous le domaine.)
Pour cela, je souhaiterais faire la moyenne de la densité pour chaque année.

Après quelques recherches, j'ai codé un peu (voir ci-dessous) mais j'ai toujours une erreur beanshell. Mais je ne sais pas d'où vient l'erreur. Après quelques heures à chercher, modifier des bouts de codes, etc... Je viens vers vous pour avoir un petit coup de main.

AddJAR("/home/legroux/applications/jfreechart-1.0.14/lib/jfreechart-1.0.14.jar");
AddJAR("/home/legroux/applications/jfreechart-1.0.14/lib/jcommon-1.0.17.jar");

import java.awt.Color;
import java.io.File;
import java.util.Iterator;
import java.sql.ResultSet;
import javax.swing.JFrame;
import org.gdms.data.DataSource;
import org.gdms.data.values.Value;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.orbisgis.core.DataManager;
import org.orbisgis.core.Services;

DataManager dm = Services.getService(DataManager.class);

DataSource ds = dm.getDataSourceFactory().getDataSource("densite_27_47_67");
ds.open();

ResulSet rs = ds.executeQuery("SELECT avg(densite202), avg(densite204), avg(densite206) FROM densite_27_47_67")

XYSeries s1 = new XYSeries("densite202, densite204, densite206");
       
while(rs.next()){
    val1 = rs.getFloat("avg(densite202)");
    val2 = rs.getFloat("avg(densite204)");
    val3 = rs.getFloat("avg(densite206)");
    s1.add(val1, val2, val3 );
}
rs.close();

XYSeriesCollection dataset = new XYSeriesCollection(s1);

 JFreeChart chart = ChartFactory.createXYLineChart(
            "Evolution de la densité de population",          // chart title
            "Année",               // x axis label
            "densite",       // y axis label
            dataset,                  // data
            PlotOrientation.VERTICAL,
            true,                     // include legend
            true,
            false
        );

chart.setBackgroundPaint(Color.white);

ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));    

JFrame frame = new JFrame();
frame.add(chartPanel);
frame.pack();
frame.setVisible(true);



Est-ce que vous pourriez m'aider à modifier ou compléter ce code pour pouvoir avoir ce genre de courbes d'évolution?

Merci par avance.
Cordialement,

Camila
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

ebocher
Administrator
Bonjour Camila,

Il y a plusieurs erreurs dans ton code.

1. ResulSet rs = ds.executeQuery("SELECT avg(densite202), avg(densite204), avg(densite206) FROM densite_27_47_67");

Tu utilises un object ResulSet de l'api jdbc (JAVA SQL). Cependant GDMS ne retourne pas ce type d'objets mais un objet DataSet.
De plus , ds.executeQuery ne retourne pas d'objets mais execute uniquement la requete. Tu trouveras des exemples pour utiliser GDMS ici : http://trac.orbisgis.org/wiki/devs/GDMS2




2. L'utilisation de la librarie JFreeChart est erronée notamment au niveau du constructeur XYseries. Je te conseilles de regarder la javadoc (http://www.jfree.org/jfreechart/api/javadoc/) afin de comprendre les arguments utiles à cet objet.


Erwan
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

Camila
Re !

Merci pour la réponse!
Je vais regarder ça de plus près. J'espère comprendre!
Bonne journée.
Camila

P.S : Savez-vous d'où pourrait venir l'erreur qui apparait lorsque je fais une requête ST_AddZ ?
http://orbisgis.3871844.n2.nabble.com/SQL-de-la-version-3-a-la-V-4-0-td7574592.html
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

Alexis.G
In reply to this post by ebocher
Bonjour,

vous trouverez par ailleurs la javadoc d'OrbisGIS sur le site
http://javadoc.orbisgis.org

Respectueusement,

Alexis.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

Camila
Bonjour,

après quelques jours sur d'autres choses, je me remets depuis hier au beanshell pour essayer de sortir des graphiques d'évolution temporelle pour toute l'agglomération toulousaine.

J'ai fait pas mal de recherches, et tester quelques trucs. j'ai notamment suivi votre conseil et approfondi l'objet DataSet. Mais j'ai toujours des erreurs beanshell... Je voulais savoir si vous pouviez lire mon code et m'aider à trouver l'erreur ?

Mon code :

AddJAR("/home/legroux/applications/jfreechart-1.0.14/lib/jfreechart-1.0.14.jar");
AddJAR("/home/legroux/applications/jfreechart-1.0.14/lib/jcommon-1.0.17.jar");

import java.awt.Color;
import java.io.File;
import java.util.*;
import java.sql.*;
import javax.swing.JFrame;
import org.gdms.data.DataSource;
import org.gdms.data.values.Value;
import org.gdms.driver.DataSet;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeriesCollection;
import org.orbisgis.core.DataManager;
import org.jfree.data.xy.XYDataset;
import org.orbisgis.core.Services;

DataManager dm = Services.getService(DataManager.class);

DataSource ds = dm.getDataSourceFactory().getDataSource("T2M_MOY");
ds.open();

DataSet dataset = new DataSet();

    dataset.add("Select avg(T2M_22) FROM T2M_MOY");
    dataset.add("Select avg(T2M_23) FROM T2M_MOY");
    dataset.add("Select avg(T2M_00) FROM T2M_MOY");
    dataset.add("Select avg(T2M_01) FROM T2M_MOY");
    dataset.add("Select avg(T2M_02) FROM T2M_MOY");

 JFreeChart chart = ChartFactory.createXYLineChart(
            "Evolution des temperatures entre minuit et 4h00",          // chart title
            "heures",               // x axis label
            "température",       // y axis label
            dataset,                  // data
            PlotOrientation.VERTICAL,
            true,                     // include legend
            true,
            false
        );

chart.setBackgroundPaint(Color.white);

ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));    

JFrame frame = new JFrame();
frame.add(chartPanel);
frame.pack();
frame.setVisible(true);


Je souhaiterais avoir soit une courbe, soit des barres représentant la moyenne des températures pour chaque heure, ce qui permettrait d'analyser l'évolution des températures pendant la nuit à l'échelle de l'aire urbaine. (puis de modifier ce code pour pouvoir l'utiliser avec d'autres variables/indicateurs...)

Merci à l'avance.
Cordialement,

Camila
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

Camila
Bonjour,

Je viens de relire ce que j'ai posté hier.
J'ai oublié de préciser que lorsque j'exécute ce code dans le beanshell, j'ai cette erreur qui apparaît:

--------Erreur beanShell------------
new DataSet ( )
--------------------

J'ai fais pas mal de recherches sur les objets DataSet mais je ne vois pas pourquoi j'ai cette erreur donc je suis un peu bloquée...

Merci.
Cordialement,
Camila
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Courbe d'évolution - JFreeChart

ebocher
Administrator
Bonjour,

Dans ton code, tu ajoutes dans un object dataset d'orbisgis des informations pour l'object dataset de jfreechart (import org.gdms.driver.DataSet).

Il faut que tu utilises les objets de JfreeChart à savoir qqchose comme :

DataSource ds = dm.getDataSourceFactory().getDataSource("densite_27_47_67");
ds.open();

Iterator  iter = ds.iterator();

XYSeries s1 = new XYSeries("densite202");
       
XYSeries s1 = new XYSeries("densite202");
       
while(iter.hasNext()){
    Value[] values = iter.next();
    gid = values[1].getAsInt();
    val1 = values[2].getAsInt();
    s1.add(gid, val1 );
}

XYSeriesCollection dataset = new XYSeriesCollection(s1);

ds.close();


Erwan
Loading...