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

Graphisme Java Discussion :

Graphiques et stats sous Swing


Sujet :

Graphisme Java

  1. #1
    Expert éminent
    Avatar de Matthieu Vergne
    Homme Profil pro
    Consultant IT, chercheur IA indépendant
    Inscrit en
    Novembre 2011
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant IT, chercheur IA indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2 265
    Points : 7 763
    Points
    7 763
    Billets dans le blog
    3
    Par défaut Graphiques et stats sous Swing
    Bonjour, (excusez l'absence d'accentuations, clavier QWERTY)

    Je cherche a faire des graphes, tels que des boxplot et autres graphes pour stats, sur une interface Java Swing, mais je ne sais pas quelle bibliotheque utiliser. Mon predecesseur utilisait R, aussi j'avais pense utiliser une lib Java pour R, mais la seule qui semble convenir est RCaller (http://code.google.com/p/rcaller/), sauf que je ne trouve pas la Javadoc et ca ne semble pas etre un projet tres actif ni aboutit. Du coup je reviens a la base : quelle librairie Java pourriez-vous me suggerer pour generer des graphiques ?

    Je cherche de preference du pur Java, mais si vraiment il n'y a rien d'autre je me reporterai aux JNI & co. Eventuellement basee sur R, mais ca c'est du bonus (moi-meme je ne le maitrise pas, donc je suis meme pas sur que ca me servira).
    Site perso
    Recommandations pour débattre sainement

    Références récurrentes :
    The Cambridge Handbook of Expertise and Expert Performance
    L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})

  2. #2
    Membre averti Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Points : 323
    Points
    323
    Par défaut
    http://java.developpez.com/outils/api/#charts je l'ai pas inventé ça vient d'un sujet très similaire (si tu veux en faire le tour : http://www.developpez.net/forums/d13...e/graphe-java/ )

    Bon courage, j'ai pas pris le temps de voir ce que ça valait mais j'espère que ça peut t'aider !
    Un petit n'est pas de trop si le message est utile

    "Vous êtes très nombreux dans votre cas? J'ai jamais pensé que les cons étaient en minorité..."

  3. #3
    Expert éminent
    Avatar de Matthieu Vergne
    Homme Profil pro
    Consultant IT, chercheur IA indépendant
    Inscrit en
    Novembre 2011
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant IT, chercheur IA indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2 265
    Points : 7 763
    Points
    7 763
    Billets dans le blog
    3
    Par défaut
    Sympa le listing, je vais voir ca {^_^}.
    Site perso
    Recommandations pour débattre sainement

    Références récurrentes :
    The Cambridge Handbook of Expertise and Expert Performance
    L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})

  4. #4
    Membre averti Avatar de Doopeijii
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 215
    Points : 323
    Points
    323
    Par défaut
    Dis moi si tu trouves un truc sympa et userfriendly, peut être qu'un jour ça me servira
    Un petit n'est pas de trop si le message est utile

    "Vous êtes très nombreux dans votre cas? J'ai jamais pensé que les cons étaient en minorité..."

  5. #5
    Expert éminent
    Avatar de Matthieu Vergne
    Homme Profil pro
    Consultant IT, chercheur IA indépendant
    Inscrit en
    Novembre 2011
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant IT, chercheur IA indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2 265
    Points : 7 763
    Points
    7 763
    Billets dans le blog
    3
    Par défaut
    JCCKit a l'air pas mal du tout niveau flexibilite, mais il a pas grand chose de base. En particulier, j'aimerais bien faire des boxplot mais je trouve rien dessus... A part le fait que je peut etendre moi meme le truc en faisant ma propre classe {'^_^} (pour le calcul et le rendering). J'ai pas essaye donc je sais pas si c'est complique, mais c'est toujours du boulot en plus.
    Site perso
    Recommandations pour débattre sainement

    Références récurrentes :
    The Cambridge Handbook of Expertise and Expert Performance
    L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})

  6. #6
    Expert éminent
    Avatar de Matthieu Vergne
    Homme Profil pro
    Consultant IT, chercheur IA indépendant
    Inscrit en
    Novembre 2011
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant IT, chercheur IA indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2 265
    Points : 7 763
    Points
    7 763
    Billets dans le blog
    3
    Par défaut
    Non, je réveille pas un sujet mort, je complète juste mon feedback maintenant que je suis de retour dessus {^.^}~.

    Je viens d'essayer JFreeChart. C'est pas très compliqué (bien que des fois on se pose vraiment des questions), on arrive avec peu de code à faire même des graphes contenant plusieurs courbes. Voici un exemple de fonction qui prend les données en argument et renvoie le graphique à insérer dans une JFrame (je laisse le reste à votre habitude {^_^}):

    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
    protected ChartPanel createChart(Map<String, Map<Integer, Integer>> data) {
    	// création du graphique vide
    	JFreeChart chart = ChartFactory.createLineChart("Titre", "x", "y", null, PlotOrientation.VERTICAL, true, false, false);
     
    	// insertion des données
    	int index = 0; // identifie les différentes courbes
    	for (String curveTitle : data.keySet()) {
    		// on récupère les données d'une courbe
    		DefaultMultiValueCategoryDataset dataset = new DefaultMultiValueCategoryDataset();
    		Map<Integer, Integer> instanceData = data.get(curveTitle);
    		for (Map.Entry<Integer, Integer> entry : instanceData.entrySet()) {
    			// insertion du point, notez la nécessité de
    			// faire une liste, ce qui n'est pas naturel
    			int x = entry.getKey();
    			int y = entry.getValue();
    			dataset.add(Arrays.asList(y), curveTitle, x);
    		}
     
    		// on insère les données dans le graphique
    		CategoryPlot plot = (CategoryPlot) chart.getPlot();
    		plot.setDataset(index, dataset);
     
    		// création d'un renderer pour chaque courbe
    		// sinon seule la première est affichée
    		CategoryItemRenderer renderer = new DefaultCategoryItemRenderer();
    		plot.setRenderer(index, renderer);
     
    		index++;
    	}
    	return new ChartPanel(chart);
    }
    Cela dit, c'est pas toujours facile à lire quand on affiche beaucoup de données : j'ai fait une tentative avec des boxplots (BoxAndWhisker) et avec une centaine d'éléments on voit pas grand chose (contrairement à des designs épurés comme R). Voilà ce que ça me donne : http://img440.imageshack.us/img440/2417/imagelb.png
    Notez que certains sont incomplets et ont des flèches en haut et en bas, je sais pas pourquoi vu que je n'ai aucune donnée qui sort des limites. Notez aussi (et ça c'est plus grave) que les X sont tous affichés... ce qui les rends illisibles évidemment. Je sais qu'on peut donner une inclinaison, mais j'ai pas besoin des 100 (10 par 10 me suffit, mais je sais pas si je peux le régler ça).

    Le côté pro "joli" veut pas dire pro "pratique" {'^_^}. J'imagine qu'il doit y avoir moyen de simplifier tout ça en réglant les renderers et autres paramètres... mais c'est toujours du boulot en plus.
    Site perso
    Recommandations pour débattre sainement

    Références récurrentes :
    The Cambridge Handbook of Expertise and Expert Performance
    L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})

  7. #7
    Expert éminent
    Avatar de Matthieu Vergne
    Homme Profil pro
    Consultant IT, chercheur IA indépendant
    Inscrit en
    Novembre 2011
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant IT, chercheur IA indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2 265
    Points : 7 763
    Points
    7 763
    Billets dans le blog
    3
    Par défaut
    Je reviens une dernière fois (je pense) à la charge dans ce sujet. J'ai essayé JCCKit et JCharts, mais comme je ne trouve pas le moyen de faire des box plot, c'est pas la peine. Du coup je me suis retranché sur JFreeChart.

    En ce qui concerne mon principal soucis d'affichage, voilà le truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataset.add(Arrays.asList(y), curveTitle, x);
    a été remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataset.add(Arrays.asList(y), curveTitle, new X(x, isDisplayed));
    Où la classe X est quelque chose de ce style :
    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
    // wrapper pour x, il implémente Comparable
    // car c'est un prérequis pour le dataset
    class X implements Comparable<X> {
    	private final int x;
    	private final boolean displayed;
     
    	public X(int x, boolean displayed) {
    		this.x = x;
    		this.displayed = displayed;
    	}
     
    	@Override
    	public int compareTo(X o) {
    		// comparer deux X revient à comparer les deux x qu'ils représentent
    		return new Integer(x).compareTo(o.x);
    	}
     
    	@Override
    	public String toString() {
    		// c'est cette méthode qui décide si le x
    		// est affiché sur le graphique ou non
    		return displayed ? "" + iteration : "";
    	}
     
    	@Override
    	public boolean equals(Object obj) {
    		// cette méthode permet de rendre équivalent
    		// deux X qui représentent le même x
    		if (obj == this) {
    			return true;
    		} else if (obj instanceof X) {
    			return x == ((X) obj).x;
    		} else {
    			return false;
    		}
    	}
     
    	@Override
    	public int hashCode() {
    		// réécrit car le hash doit être le même pour deux objets équivalents
    		return x;
    	}
    }
    X est une classe toute simple qui a une représentation en string qui correspond au paramètre x (en chaine de caractère) si le paramètre isDisplayed == true (calculé sur la base d'un modulo par exemple). De cette manière, on peut décider quels sont ceux qui vont être affichés sur l'axe. Un détail à noter : si on gère plusieurs courbes, il faut soit redonner les même objets (donc les garder quelque part) soit implémenter une équivalence entre les objets représentant les même x (c'est pourquoi j'ai réécrit equals()). Sinon, les éléments se rajouteront les uns à la suite des autres et l'axe sera complètement faussé.

    Enfin, une fois le graphe créé on rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chart.getCategoryPlot().getDomainAxis().setMaximumCategoryLabelWidthRatio(axisRatio);
    où axisRatio correspond à la taille allouée pour afficher chaque élément sur l'axe (sinon c'est partagé équitablement et tout est réduit à "..."). Je suis pas sûr du calcul, mais comme j'ai mis 1 élément à afficher tous les 10, j'ai mis 10 en paramètre de cette méthode (entre 0 et 1 ça donnait rien de probant).

    Du coup j'ai maintenant un bel axe avec tous les traits mais seulement les dizaines d'affichées {^_^}.
    Site perso
    Recommandations pour débattre sainement

    Références récurrentes :
    The Cambridge Handbook of Expertise and Expert Performance
    L’Art d’avoir toujours raison (ou ce qu'il faut éviter pour pas que je vous saute à la gorge {^_^})

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

Discussions similaires

  1. Librairie graphique en C sous linux
    Par myke38 dans le forum C
    Réponses: 10
    Dernier message: 21/02/2006, 13h17
  2. Interface graphique pour NMAP sous windows ?
    Par elitost dans le forum Développement
    Réponses: 2
    Dernier message: 07/11/2005, 00h09
  3. Créer un graphique en GIF sous DELPHI pour du web
    Par Thom@s dans le forum Web & réseau
    Réponses: 20
    Dernier message: 08/07/2004, 15h40
  4. Front End graphique pour GDB sous windows
    Par KORTA dans le forum GDB
    Réponses: 8
    Dernier message: 20/08/2003, 09h52

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