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

Windows Forms Discussion :

Modification et affichage des axes dans un control Chart


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Modification et affichage des axes dans un control Chart
    Bonjour,
    J'ai besoin d'afficher plusieurs graphiques dans une fenêtre et comme les données ne sont pas toutes à la même échelle il faut que j'organise un peu tout ça.
    J'arrive donc à mettre toute les données dans le Chart, modifier le scale pour voir toute les données, balayer les données via une HorizontalScrollBar.
    Le seul hic c'est que le control Chart cale tout seul les intervalles sur l'axe des Y, et en plus avec des valeurs contenant trop de décimales.
    Et lors de la création dynamique je ne peut pas mettre un intervalle comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unChart.ChartAreas[0].AxisY.Interval = 100;
    Car si je fais cela tout mes graphiques seront illisible car certaines valeurs oscillent entre -3000 et +3000 alors que d'autre de -15 a +20.

    En gros ça tiens en 2 questions :
    - Comment je fais pour forcer le Chart à n'afficher que des valeurs entières sur l'axe des Y (pour une meilleure lecture) ??
    - Comment je peut faire apparaître la ligne y = 0 ? (histoire d'avoir un repère quand même )
    Ci-joint un screen de ma form pour vous montrez comme c'est illisible en Y

    Merci pour le temps passer à lire tout ça et surtout pour me répondre (si possible, )
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Après plusieurs heures de recherches partout sur le web, j'ai finalement pu trouver des morceaux par-ci par-là.
    donc je résout la discussion mais je mets quand même les morceaux de code les plus "compliqué" du projet. Au cas où ça aiderait quelqu'un.

    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
     
    private int chartPosX = -20;
    private int chartPosY = 20;
    private int chartHeight = 150;
    private int chartWidth = 1200;
     
    //récupération des données => dans un tableau.
    //récupération des nom de colonnes. pour chaque colonne créer un graph avec ce nom.
    //dans la fonction d'initialisation :
     
    for (int i = 0; i < graphs.Length; i++)
    {//pour chaque colonne de données
    	Chart chartCourrant = AjouterChart(DonnerNom(donnees[0, graphs[i]]));   //on récupère l'entete de la colonne contenant les données, on l'utilise pour creer le graphique
    	serieCourrante = chartCourrant.Series[0];    //on recup la 1ere (et unique) serie
    	serieCourrante.ChartType = SeriesChartType.FastLine; //on passse le graphique en ligne (histogramme de base)
    	//float.TryParse(donnees[1, index_Odo], out x);   //on prends la 1ere valeur d'odometrie//float.TryParse(donnees[donnees.GetLength(0)-2, index_Odo], out y);  //et la derniere
    	chartCourrant.ChartAreas[0].AxisX.Minimum = scrBar_odo.Minimum - 750;   //on veut afficher 1.500m de voie. on commence a 0 (au millieu du graph), donc le début se situe a -750m
    	chartCourrant.ChartAreas[0].AxisX.Maximum = scrBar_odo.Maximum + 750;   //les courbes s'arretant aussi au millieu du graphique on ajoute 750m a la fin
    	for (int j = 1; j < donnees.GetLength(0); j = j + 4)
    	{//on parcours toute les lignes de données
    		x = j / 4;	//avancement de 4 lignes par 4 dans le fichier
    		y = 0.0f;   float.TryParse(donnees[j, graphs[i]], out y);
    		if ( y != 0.0f )
    		{//si on a une donnée avec cet odometrie
    			serieCourrante.Points.AddXY(x, y);  //alors on l'affiche
    		}
    	}
    	chartCourrant.Series[0].ToolTip = "x: #VALX\r\ny: #VALY";   //on pose des ToolTip sur tous les points de la serie
    }
     
    /// <summary>
    /// fonction permettant l'ajout de grraph dynamiquement
    /// </summary>
    /// <param name="nomSerie">Nom du graphique, nom mit dans la série et la légende du Chart</param>
    /// <returns>Retourne le Chart qui viens d'être créer</returns>
    private Chart AjouterChart(string nomSerie )
    {
    	Chart unChart = new Chart();                //déclaration du chart
    	ChartArea uneChartArea = new ChartArea();   //déclaration du chartArea
     
    	unChart.ChartAreas.Add(uneChartArea);                       //on ajoute le chartArea au graphique
    	unChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false;      //on enlève la barre des abscices
    	unChart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;  //on met les Y en pointillés
    	unChart.ChartAreas[0].AxisX.Interval = 100;     //un intervalde 100 pour les X
    	unChart.ChartAreas[0].CursorX.IsUserEnabled = false;    //on enlève la possibilité du cursuer
    	unChart.ChartAreas[0].CursorY.IsUserEnabled = false;    //pour l'utilisateur en X et en Y
    	unChart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;    //on active la possibilité de sélection d'une
    	unChart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;    //plage => permet de faire un zoom
    	unChart.ChartAreas[0].CursorX.Position = 0; //on set la position des curseurs a 0
    	unChart.ChartAreas[0].CursorY.Position = 0;
    	unChart.ChartAreas[0].CursorY.LineColor = Color.Black;  //on définit la couleur du trait
    	Series uneSerie = new Series(); //on déclare la serie qui va alimenter le graph
    	uneSerie.Name = nomSerie;   //on lui donne l enom passé en paramètre
    	unChart.Legends.Add(new Legend(nomSerie));  //on donne le meme nom a la legende
    	unChart.Legends[0].Enabled = true;  //on active la légende
    	uneSerie.LegendText = nomSerie;
    	uneSerie.IsVisibleInLegend = true;  //on rend visible la légende
    	uneSerie.ChartArea = "ChartArea1";  //on nome la chartArea
    	uneSerie.Color = Color.Black;
    	uneSerie.ChartType = SeriesChartType.FastLine; //on passse le graphique en ligne (histogramme de base)
    	unChart.Series.Add(uneSerie);   //on ajoute la serie au graph
    	unChart.Location = new Point(chartPosX, chartPosY); //on place le graph
    	chartPosY += chartHeight;   //on augmente la position Y des graph avec la hauteur d'un graph (pour qu'il se mettent les uns en dessous des autres)
    	unChart.Size = new Size(chartWidth, chartHeight);   //on définit la taille du graph
    	unChart.MouseClick += unChart_MouseClick;   //on ajoute une fonction sur l'événement du clic
    	panel.Controls.Add(unChart);    //on ajoute au final le graph dans notre panel
     
    	return unChart; //on retourne le chart créé
    }
     
    void unChart_MouseClick(object sender, MouseEventArgs e)
    {
    	Chart unChart = (Chart)sender;
    	try
    	{
    		if (e.Button == System.Windows.Forms.MouseButtons.Right)
    		{
    			unChart.ChartAreas[0].AxisX.ScaleView.ZoomReset();
    			unChart.ChartAreas[0].AxisY.ScaleView.ZoomReset();
    		}
    		unChart.ChartAreas[0].CursorX.Position = unChart.ChartAreas[0].AxisX.ScaleView.ViewMaximum - 750;
    		//on positione le curseur à partir de la fin - 750 (car le graph est visible sur 1500)
    	}
    	catch { }
    }
     
    private string[,] ParserFichier(string s_chemin)
    {
    	StreamReader sr = File.OpenText(s_chemin);
    	var fichier = sr.ReadToEnd();       //on lit tout le fichier
    	string[] lignes = fichier.Split(new char[] { '\n' });   //on recupère toute les lignes
    	var nbLigne = lignes.Length;    //on récup le nombre total de lignes
    	var nbCol = lignes[0].Split(';').Length;   //on récup le nombre total de colonnes
    	string[,] retour = new string[nbLigne, nbCol];   //variable de retour
    	string s_temp = "";
     
    	for (int i = 0; i < lignes.Length; i++)
    	{//pour chaque ligne
    		string[] ligne = lignes[i].Split(';');  //on découpe la ligne avec le séparateur
    		for (int j = 0; j < ligne.Length; j++)
    		{
    			s_temp = ligne[j];
    			if (s_temp.Equals("")) { s_temp = "0"; }
    			retour[i, j] = s_temp;
    		}
    	}
    	return retour;
    }

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2014, 19h55
  2. GUI Affichage des axes dans une fenêtre de type 'axes'
    Par Matersss dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 09/03/2011, 12h52
  3. Sens des axes dans un affichage polaire
    Par Luigicube dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 30/05/2008, 09h40
  4. [VB6] Modification des axes d'un composant Chart
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2003, 08h33
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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