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

VB.NET Discussion :

problème avec l'aspect d'un histogramme


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut problème avec l'aspect d'un histogramme
    Bonjour à tous,
    j'ai enfin réussit à générer un histogramme, mais les données de mon graphe sont presque illisibles. j'ai essayé de modifier quelques paramètres (perspective, rotation, inclinaison, ...) mais en vain. De plus, j'aimerais bien que l'axe des abscisses affiche toutes les valeurs ....
    voici le code que j'utilise
    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
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
      Try
                ' Créer ChartArea (zone graphique)
                Dim d3 As New ChartArea3DStyle
     
                Dim ChartArea1 As New ChartArea()
                ' Ajouter le  Chart Area à la Collection ChartAreas du  Chart
                Chart2.ChartAreas.Add(ChartArea1)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Enable3D = True
     
     
     
     
                Chart2.ChartAreas(0).AxisX.Title = "Numéros des postes"
                Chart2.ChartAreas(0).AxisY.Title = "Poste de contrôle rongeur "
                'Inclinaison
     
     
                ' défnir les couleurs
                '  Dim colorSet() As Color = {Color.Red, Color.Green, Color.Blue, Color.Purple}
                ' Chart2.PaletteCustomColors = colorSet
                'Chart2.Palette = ChartColorPalette.None
     
                'ajout de la legende
                Dim legend1 As New Legend
                Chart2.Legends.Add(legend1)
                Chart2.Legends(0).ShadowOffset = 2
     
                'ajouter un titre
                Chart2.Titles.Add("Suivi des postes de contrôle rongeur du client N°" & frmGestionClt.DTGclient.CurrentRow.Cells.Item(0).Value & "")
     
                ' font, taille.. du titre
                Chart2.Titles(0).Font = New Font("Arial", 12, FontStyle.Bold)
                Chart2.Titles(0).ForeColor = Color.DarkRed
                ' Couleur du fond
     
                ' Couleur du bord
                Chart2.Titles(0).BorderColor = Color.MediumBlue
     
                ' Position du texte dans le rectangle
                Chart2.Titles(0).Alignment = System.Drawing.ContentAlignment.TopCenter
     
     
                ' Text du ToolTip du titre
                Chart2.Titles(0).ToolTip = "Title"
     
     
                ' Positionner le controle Chart
                Chart2.Location = New System.Drawing.Point(10, 10)
     
                ' Dimensionner le Chart
                Chart2.Size = New System.Drawing.Size(900, 550)
     
                'Pour modifier l'épaisseur des StepLine
     
                Chart2.Series.Clear()
     
     
                ' Set Border Skin
                Chart2.BorderSkin.SkinStyle = BorderSkinStyle.Emboss
     
                ' Set Back Color
                Chart2.BorderSkin.BackColor = Color.Red
     
                ' Set Back Gradient End Color
                Chart2.BorderSkin.BackSecondaryColor = Color.Blue
     
                ' Set Hatch Style
                Chart2.BorderSkin.BackHatchStyle = ChartHatchStyle.DarkVertical
     
                ' Set Gradient Type
                Chart2.BorderSkin.BackGradientStyle = GradientStyle.DiagonalRight
     
                ' Set Border Color
                Chart2.BorderSkin.BorderColor = Color.Yellow
     
                ' Set Border Style
                Chart2.BorderSkin.BorderDashStyle = ChartDashStyle.Solid
     
                ' Set Border Width
                Chart2.BorderSkin.BorderWidth = 2
     
     
     
                ' 30% de perspective
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Perspective = 30
     
                ' Rotation d'un Angle de 30
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Rotation = 30
     
                'Inclinaison
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Inclination = 45
     
                ' Mettre le  Point Depth à 100 (profondeur de la colonne)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.PointDepth = 100
     
                ' Mettre le Point Gap Width à 0 (profondeur entre les series)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.PointGapDepth = 0
                Chart2.ChartAreas("ChartArea1").Area3DStyle.IsClustered = False
     
                'Epaisseur du mur gris 
                Chart2.ChartAreas(0).Area3DStyle.WallWidth = 10
     
                'Chart2.ChartAreas(0).AxisX.MajorGrid.Interval = 1
                'Chart2.ChartAreas(0).AxisX.MajorTickMark.Interval = 1
     
                Chart2.ChartAreas(0).Area3DStyle.IsRightAngleAxes = True
                Chart2.ChartAreas(0).AxisX.IsLogarithmic = False
     
     
     
                Dim req As String
                req = ""
                Dim u As Integer
                u = 0
                Dim dateu(50) As String
                Dim longdatu, i As Integer
                Dim serie As Series
                For i = 0 To frmparametre.CheckedListBox1.Items.Count - 1
                    If frmparametre.CheckedListBox1.GetItemChecked(i) Then
                        req = req & "date = " & """" & frmparametre.CheckedListBox1.Items.Item(i) & """" & " or "
                        dateu(u) = frmparametre.CheckedListBox1.Items.Item(i)
                        longdatu = u
                        serie = New Series(dateu(u).ToString)
                        Chart2.Series.Add(serie)
                        Chart2.Series(dateu(u).ToString).BorderWidth = 4
                        'Chart2.Series(dateu(u).ToString).IsXValueIndexed = True
                        ' Chart2.Series(dateu(u).ToString).IsXValueIndexed = True
                        u = u + 1
                    End If
                Next
     
                req = Mid(req, 1, Len(req) - 4)
     
     
                Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=" & server & ";" + "DATABASE=prj;" + "UID=" & user & ";" + "PASSWORD= " & mp & ";"
                Dim con As New OdbcConnection(MyConString)
                Dim MyDataReader As OdbcDataReader
                Dim MyCommand As New OdbcCommand()
                Dim x, idclient As Integer
                con.Open()
                MyCommand.Connection = con
                'récupérer  id_client 
                MyCommand.CommandText = "select Id_client from client where Numero_de_client=" & "'" & frmGestionClt.client & "'"
                MyDataReader = MyCommand.ExecuteReader()
                x = MyDataReader.Read()
                idclient = MyDataReader.GetInt32(0)
                MyDataReader.Close()
     
                Dim dt As New DataTable
                'idclient
                Dim d, a, j As String
                Dim s As Integer
     
                MyCommand.CommandText = " SELECT i.`Date` , p.numero_du_poste, r.`F#C`, r.`M#C`,r.`T#C` FROM intervention i, poste p, client c, caracteristique r WHERE c.id_client = p.id_client AND c.id_client = i.id_client  and r.id_poste=p.id_poste and r.id_intervention=i.id_intervention and (" & req & ")  AND i.id_client =""" & idclient & "order by i.Date """
                MyDataReader = MyCommand.ExecuteReader()
     
                While (MyDataReader.Read())
                    s = 0
                    If MyDataReader.GetString(2) = "VRAI" Then
                        s = s + 1
                    End If
                    If MyDataReader.GetString(3) = "FAUX" Then
                        s = s + 2
                    End If
                    If MyDataReader.GetString(4) = "VRAI" Then
                        s = s + 7
                    End If
     
                    d = MyDataReader.GetDate(0).ToString
                    d = Mid(d, 1, 10)
                    d = Replace(d, "/", "-")
                    a = Mid(d, 7, 4)
                    j = Mid(d, 1, 2)
                    d = Mid(d, 3, 4)
                    d = a & d & j
                    Chart2.Series(d).Points.AddXY(MyDataReader.GetInt32(1), s)
                End While
                MyDataReader.Close()
     
     
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
     
            ' Ajouter le chart à la form
            Me.Controls.Add(Chart2)
    J'attend votre aide
    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    pour afficher toutes les valeurs de l'axe des abscisse je dois mettre à true la propriété IsXValueIndexed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chart2.Series(dateu(u).ToString).IsXValueIndexed = True
    mais cela génère une erreur : les séries doivent être aligned????
    je n'ai pas compris cette erreur.
    je suis toujours bloquée au niveau aspect de l'histogramme: les barres d'une série cachent les barres de la série d'après comme indiqué dans l'image jointe

    toute aide sera la bienvenue

  3. #3
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    je n'ai pas encore trouvé de solution pour le problème de lisibilité des données dans un histogramme 3D.
    est ce qu'il n'y a pas de moyen pour résoudre ce problème. j'ai beau cherché mais en vain
    pouvez vous m'indiquer s'il y a d'autres pistes pour générer un histogramme 3D?

  4. #4
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    Bonjour,

    Qu'est ce que je dois changer au niveau du code pour avoir un graphique comme le deuxième graphique que j'ai attaché au lieu du premier graphique attaché.
    je souhaite espacer les barres et avoir toutes les valeurs de l'axes des abscisses (parce qu'il y a des valeurs qui ont été supprimées automatiquement)

    j'ai vraiment besoin de votre aide. je cherche à résoudre ce problème depuis longtemps.

    Merci de m'aider.
    Images attachées Images attachées  

  5. #5
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    visiblement tu mène ton combat seule

    voici un petit cours qui devrais t'aider:
    http://plasserre.developpez.com/cours/chart/

    Le mieux c'est que tu jette un coup d’œil,
    si tu rencontre encore des problèmes, hésite pas à revenir vers nous

  6. #6
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    merci pour votre réponse c'est encourageant.

    Je connais ce cours presque par coeur. c'est en me basant sur ce cours que j'ai pu réalisé l'histogramme. Malheureusement, pour les histogrammes 3D. il n'y a pas assez de données....

    Je galère depuis un bon moment.
    Si vous pouvez jetez un coup d'oeil sur les deux histogrammes que j'ai mis comme fichiers joints pour voir quels conseils pouvez vous me donner afin de passer de l'histogramme 1 vers l'histogramme 2.
    et merci infiniment pour votre réponse.

  7. #7
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    ok ... je savais pas
    j'ai trouvé un autre cours qui parle de la 3D aussi
    http://loufab.developpez.com/tutoriels/access/msgraph2/

    je regarde ton problème demain.

    PS: tu a de la chance je suis sur un projet ou je ne fait que jouer avec des Chart

  8. #8
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Hello,

    bon sérieusement quand tu dit
    Je connais ce cours presque par coeur.
    tu y crois ?
    ce cours est très bien fait, je vois vraiment pas ou tu bloque

    par défaut, j'ai ceci


    le temps d'adapter mes données à un graphe visible,
    j’obtiens ceci :




    Personnellement je trouve que tu a tout ce dont tu a besoin pour la 3D dans le chapitre "III-B-4. 3D"

    je te laisse mon code au cas ou tu comprenne pas,
    il est pas très ludique, je l'ais fait rapidement pour voir ou tu bloqué.
    Mais comme il n'y a pas grande difficulté je ne t'explique pas en détails.

    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
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ' #####################################################
            ' ############### Affichage du graphique ##############
            ' #####################################################
     
            ' Nettoyage de l'espace grahpique
            chart_3D.Legends.Clear()
            chart_3D.Series.Clear()
            chart_3D.Annotations.Clear()
            chart_3D.ChartAreas.Clear()
            chart_3D.Titles.Clear()
     
            ' Créer ChartArea (zone graphique)
            Dim ChartArea1 As New System.Windows.Forms.DataVisualization.Charting.ChartArea()
            ' Creation des series (qui contiendront les DataPoint)
            Dim serie_3D_1 As New System.Windows.Forms.DataVisualization.Charting.Series()
            Dim serie_3D_2 As New System.Windows.Forms.DataVisualization.Charting.Series()
            Dim serie_3D_3 As New System.Windows.Forms.DataVisualization.Charting.Series()
            ' 3D
            Dim Style_3D As New System.Windows.Forms.DataVisualization.Charting.ChartArea3DStyle
     
            ' Ajouter le Chart Area à la Collection ChartAreas du Chart
            chart_3D.ChartAreas.Add(ChartArea1)
     
            ' Ajout des points
            With serie_3D_3
                '' Nom de la Série
                .Name = "Temperature Coeur Produit"
                '' On indique d'afficher la Serie sur le ChartArea1
                .ChartArea = "ChartArea1"
                '' Ajouter les series à la collection Series du chart
                chart_3D.Series.Add(serie_3D_3)
                '' Ajouts des points à la série
                For i As Integer = MonEssai.Releleves.Consigne.Température.Length - 11 To MonEssai.Releleves.CP.Température.Length - 1
                    chart_3D.Series(.Name).Points.AddXY(i, MonEssai.Releleves.CP.Température(i))
                Next
            End With
     
            ' Ajout des points
            With serie_3D_2
                '' Nom de la Série
                .Name = "Temperature d'enceinte"
                '' On indique d'afficher la Serie sur le ChartArea1
                .ChartArea = "ChartArea1"
                '' Ajouter les series à la collection Series du chart
                chart_3D.Series.Add(serie_3D_2)
                '' Ajouts des points à la série
                For i As Integer = MonEssai.Releleves.Consigne.Température.Length - 11 To MonEssai.Releleves.Enceinte.Température.Length - 1
                    chart_3D.Series(.Name).Points.AddXY(i, MonEssai.Releleves.Enceinte.Température(i))
                Next
            End With
     
            ' Ajout des points
            With serie_3D_1
                '' Nom de la Série
                .Name = "Temperature de consigne"
                '' On indique d'afficher la Serie sur le ChartArea1
                .ChartArea = "ChartArea1"
                '' Ajouter les series à la collection Series du chart
                chart_3D.Series.Add(serie_3D_1)
                '' Ajouts des points à la série
                For i As Integer = MonEssai.Releleves.Consigne.Température.Length - 11 To MonEssai.Releleves.Consigne.Température.Length - 1
                    chart_3D.Series(.Name).Points.AddXY(i, MonEssai.Releleves.Consigne.Température(i))
                Next
            End With
     
     
            ' Zone De dessin
            With chart_3D
                ' Style du graphique des courbes
                For i As Integer = 0 To .Series.Count - 1
                    '.Series(i).ChartType = SeriesChartType.Spline
     
                Next
     
                ' Palette de couleur de courbes
                '.Palette = ChartColorPalette.BrightPastel
                .Series(0).Color = Color.FromArgb(255, Color.Orange)
                .Series(1).Color = Color.FromArgb(255, Color.PaleTurquoise)
                .Series(2).Color = Color.FromArgb(255, Color.HotPink)
     
                ' Modifie les axes
                '' Nom
                .ChartAreas(0).AxisX.Title = "Temps"
                .ChartAreas(0).AxisY.Title = " °C"
     
                ' Permet la 3D charts
                .ChartAreas("ChartArea1").Area3DStyle.Enable3D = True
     
                ' 30% de perspective
                .ChartAreas("ChartArea1").Area3DStyle.Perspective = 0
     
                ' Rotation d'un Angle de 30
                .ChartAreas("ChartArea1").Area3DStyle.Rotation = 20
     
                'Inclinaison
                .ChartAreas("ChartArea1").Area3DStyle.Inclination = 45
     
                ' Mettre le  Point Depth à 100 (profondeur de la colonne)
                .ChartAreas("ChartArea1").Area3DStyle.PointDepth = 500
     
                ' Mettre le Point Gap Width à 0 (profondeur entre les series)
                .ChartAreas("ChartArea1").Area3DStyle.PointGapDepth = 0
     
                'Epaisseur du mur gris 
                .ChartAreas(0).Area3DStyle.WallWidth = 1
     
     
     
            End With
        End Sub
    le seul point qui laisse à désirer sur le chart c'est la largeur des colonne mais la on est coincé je crois
    La largeur des colonnes est déterminée automatiquement par la largeur du ChartArea et donc du Graph. Le Chart calcule la largeur des colonnes pour qu'elles 'rentrent' toutes dans le ChartArea.
    Bonne continuation

  9. #9
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    MERCI infiniment pour avoir pris la peine de tester un code et puis de me répondre.
    je vais essayer maintenant de corriger mon code et j'espère que je vais cliquer RESOLU

  10. #10
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    de rien,
    le but est que tu résolve ton problème

    si vraiment tu n'a pas de résultats satisfaisants,
    met ton code et un screen de ton état actuel.

    Pour avoir une 3D sympa,
    il faut que tu tâtonne sur les paramètres d'inclinaisons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                ' Permet la 3D charts
                .ChartAreas("ChartArea1").Area3DStyle.Enable3D = True
                ' 30% de perspective
                .ChartAreas("ChartArea1").Area3DStyle.Perspective = 0
                ' Rotation
                .ChartAreas("ChartArea1").Area3DStyle.Rotation = 20
                'Inclinaison
                .ChartAreas("ChartArea1").Area3DStyle.Inclination = 45

  11. #11
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    Malheureusement, mon problème d'histogramme n'est pas résolu


    ci joint ce que j'obtiens pour le moment


    et voilà le code que j'utilise
    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
     
        Sub loadchart()
            ' parametrage du graphique
            Try
                ' Nettoyage de l'espace grahpique
                Chart2.Legends.Clear()
                Chart2.Series.Clear()
                Chart2.Annotations.Clear()
                Chart2.ChartAreas.Clear()
                Chart2.Titles.Clear()
     
                ' Créer ChartArea (zone graphique)
                Dim d3 As New ChartArea3DStyle
                Dim ChartArea1 As New ChartArea()
                ' Ajouter le  Chart Area à la Collection ChartAreas du  Chart
                Chart2.ChartAreas.Add(ChartArea1)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Enable3D = True
     
                'definir les séries (qui dépendent des date cochées par l'utilisateur)
                Dim req As String
                req = ""
                Dim u As Integer
                u = 0
                Dim dateu(50) As String
                Dim longdatu, i As Integer
                Dim serie As Series
                For i = 0 To frmparametre.CheckedListBox1.Items.Count - 1
                    If frmparametre.CheckedListBox1.GetItemChecked(i) Then
                        req = req & "DateIntervention = " & """" & frmparametre.CheckedListBox1.Items.Item(i) & """" & " or "
                        dateu(u) = frmparametre.CheckedListBox1.Items.Item(i)
                        longdatu = u
                        serie = New Series(dateu(u).ToString)
                        Chart2.Series.Add(serie)
                        Chart2.Series(dateu(u).ToString).BorderWidth = 10
                        Chart2.Series(dateu(u).ToString).IsXValueIndexed = True
                        u = u + 1
                    End If
                Next
     
                req = Mid(req, 1, Len(req) - 4)
     
                'connection à la base de données
                Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=" & server & ";" + "DATABASE=prj;" + "UID=" & user & ";" + "PASSWORD= " & mp & ";"
                Dim con As New OdbcConnection(MyConString)
                Dim MyDataReader As OdbcDataReader
                Dim MyCommand As New OdbcCommand()
                Dim x, idclient As Integer
                con.Open()
                MyCommand.Connection = con
                'récupérer  id_client 
                MyCommand.CommandText = "select Id_client from client where Numero_de_client=" & "'" & frmGestionClt.client & "'"
                MyDataReader = MyCommand.ExecuteReader()
                x = MyDataReader.Read()
                idclient = MyDataReader.GetInt32(0)
                MyDataReader.Close()
     
                Dim dt As New DataTable
                Dim d, a, j As String
                Dim s As Integer
     
                MyCommand.CommandText = " SELECT i.`DateIntervention` , p.numero_du_poste, r.`FC`, r.`MC`,r.`TC` FROM intervention i, poste p, client c, caracteristique r WHERE c.id_client = p.id_client AND c.id_client = i.id_client  and r.id_poste=p.id_poste and r.id_intervention=i.id_intervention and (" & req & ")  AND i.id_client =""" & idclient & "order by i.Date """
                MyDataReader = MyCommand.ExecuteReader()
     
                While (MyDataReader.Read())
                    s = 0
                    If MyDataReader.GetString(2) = "True" Then
                        s = s + 1
                    End If
                    If MyDataReader.GetString(3) = "True" Then
                        s = s + 2
                    End If
                    If MyDataReader.GetString(4) = "True" Then
                        s = s + 7
                    End If
     
                    d = MyDataReader.GetDate(0).ToString
                    d = Mid(d, 1, 10)
                    d = Replace(d, "/", "-")
                    a = Mid(d, 7, 4)
                    j = Mid(d, 1, 2)
                    d = Mid(d, 3, 4)
                    d = a & d & j
                    ' ajout des points
                    Chart2.Series(d).Points.AddXY(MyDataReader.GetString(1), s)
                End While
                MyDataReader.Close()
     
     
                'les titres des axes
                Chart2.ChartAreas(0).AxisX.Title = "Numéros des postes"
                Chart2.ChartAreas(0).AxisY.Title = "Poste de contrôle rongeur "
     
                'ajout de la legende
                Dim legend1 As New Legend
                Chart2.Legends.Add(legend1)
                Chart2.Legends(0).ShadowOffset = 2
     
                'ajouter un titre
                Chart2.Titles.Add("Suivi des postes de contrôle rongeur du client N°" & frmGestionClt.DTGclient.CurrentRow.Cells.Item(0).Value & "")
     
                ' font, taille.. du titre
                Chart2.Titles(0).Font = New Font("Arial", 12, FontStyle.Bold)
                Chart2.Titles(0).ForeColor = Color.Black
     
                ' Couleur du bord
                Chart2.Titles(0).BorderColor = Color.Black
     
                ' Position du texte dans le rectangle
                Chart2.Titles(0).Alignment = System.Drawing.ContentAlignment.TopCenter
     
                ' Positionner le controle Chart
                Chart2.Location = New System.Drawing.Point(10, 10)
     
                ' Dimensionner le Chart
                Chart2.Size = New System.Drawing.Size(900, 550)
     
                ' 30% de perspective
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Perspective = 0
     
                ' Rotation d'un Angle de 30
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Rotation = 20
     
                'Inclinaison
                Chart2.ChartAreas("ChartArea1").Area3DStyle.Inclination = 45
     
                ' Mettre le  Point Depth à 100 (profondeur de la colonne)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.PointDepth = 500
     
                ' Mettre le Point Gap Width à 0 (profondeur entre les series)
                Chart2.ChartAreas("ChartArea1").Area3DStyle.PointGapDepth = 0
                ' Chart2.ChartAreas("ChartArea1").Area3DStyle.IsClustered = False
     
                'Epaisseur du mur gris 
                Chart2.ChartAreas(0).Area3DStyle.WallWidth = 1
     
                ' Chart2.ChartAreas("ChartArea1").AxisX.IsMarginVisible = True
     
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
     
            ' Ajouter le chart à la form
            Me.Controls.Add(Chart2)
        End Sub

    le temps d'adapter mes données à un graphe visible,
    vous voulez dire que vous avez modifié vos données de telle sorte que la dernière série ait les valeurs les plus petites et ne cache pas les autres séries?
    Images attachées Images attachées  

  12. #12
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    re

    essaye de réduire la profondeur de tes colonnes,
    ça devrai passer après, et p-e moins d'inclinaisons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' le  Point Depth (profondeur de la colonne)
                .ChartAreas("ChartArea1").Area3DStyle.PointDepth = 50
    Bon mais félicitation tu a ton graphe
    reste plus qu'a jouer sur les paramètres.

    vous voulez dire que vous avez modifié vos données de telle sorte que la dernière série ait les valeurs les plus petites et ne cache pas les autres séries?
    Non, j'ai triché en n'affichant que les 11 dernières valeurs

  13. #13
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    Bon mais félicitation tu a ton graphe
    MERCI

    Non, j'ai triché en n'affichant que les 11 dernières valeurs
    j'aimerais bien moi aussi avoir la possibilité de tricher !!!!!!!!!!!!

    ci-joint le graphique idéal.

    Pour pouvoir faire pareil je dois ajouter 4 détails à mon graphique:

    1- un espace fixe entre les barres de chaque série (comme affiché dans le graphique ci-joint)

    2- afficher les valeurs des abscisses( parce qu'il y a des valeurs qui sont supprimées automatiquement . Exemple : au lieu d'avoir les valeurs suivantes: 23, 24 27, 50,101, 102 12F, 23h, il m'affiche :23,50, 23h)( c juste un exemple)

    3- afficher les lignes qui partent de chaque valeur se trouvant au niveau du l'axe des abscisses parallèlement à l'axe des ordonnées

    4- lorsqu'on a pas de valeur Y, je souhaite afficher les petits rectangles au niveau floor du graphique (comme affiché dans le graphique ci-joint)


    PS: ai je vraiment de la chance? c'est maintenant que je vais le savoir.
    Images attachées Images attachées  

  14. #14
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    re,

    je ne vais pas tout trouver a ta place non plus
    regarde du coté des propriétés de l'objet "Chart" dans Visual Studio.
    il y a des choses intéressante


    (si tu n'a pas de chart, ajoute en un pour voir les paramétres)


    Je sais pas si c'est ce que tu cherche, j'ai pas essayé mais c'est un début.

    et puis j'ai cassé la démo de ce matin, il faut que j'avance sur mon Projet également.

    2- afficher les valeurs des abscisses( parce qu'il y a des valeurs qui sont supprimées automatiquement . Exemple : au lieu d'avoir les valeurs suivantes: 23, 24 27, 50,101, 102 12F, 23h, il m'affiche :23,50, 23h)( c juste un exemple)
    ça c'est juste un traitement de ta part a faire sur les valeurs que tu récupère,
    pour ensuite attacher les bonnes valeurs à l'axe des x

    3- afficher les lignes qui partent de chaque valeur se trouvant au niveau du l'axe des abscisses parallèlement à l'axe des ordonnées
    toujours dans le même cours chapitre "III-B-1. Axes"
    On peut modifier l'épaisseur et la couleur des traits de la grille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Couleur de la grille principale
    Chart1.ChartAreas(0).AxisX.MajorGrid.LineColor = Color.LightGray
    'Couleur de la grille secondaire
    Chart1.ChartAreas(0).AxisY.MinorGrid.LineColor = Color.LightGray
    'Epaisseur du trait de la grille principale
    Chart1.ChartAreas(0).AxisY.MajorGrid.LineWidth = 3

    PS: essaye de séparer le code de traitement des donnée à celui de l'affichage graphiqe
    PPS: si ton code grandi, tu risque de t'y perdre
    PPPS: c'est juste un conseil

  15. #15
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    j'ai abondonné le contrôl chart. j'ai mon histogramme depuis 2 mois mais je n'ai pas réussi à rendre mes données lisibles.

    Plan B : j'ai décidé de générer un document word contenant le graphique
    pour ce faire j'ai utilisé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     oShape = oWordDoc.Shapes.AddOLEObject( _
                Left:=100, Top:=100, Width:=400, Height:=350, _
                ClassType:="msgraph.chart.8", DisplayAsIcon:=False)
            oGraphChart = oShape.OLEFormat.Object
    ce code génère le graphe mais le résultat n'est pas satisfaisant
    j'ai essayé de passer à la classtype= "excel.chart" qui génère des histogrammes plus beaux

    mais malheureusement, j'ai eu l'erreur suivante
    Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Graph.Chart'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000208FB-0000-0000-C000-000000000046}' failed due to the following error: Cette interface n’est pas prise en charge (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
    au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oGraphChart = oShape.OLEFormat.Object
    comment corriger cette erreur?

  16. #16
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    enfin c'est résolu et ci-joint l'histogramme résultat
    Images attachées Images attachées  

  17. #17
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    lol ça c'est de la programmation *Excel*

    Malheureusement tu ne met pas ta solution à la fin de ton post...

    PS: la grille de de fond est horizontale...
    PPS: Les histogrammes ne se touchent pas ...

  18. #18
    Membre confirmé
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    vous ne trouvez pas qu'excel est meilleur que le contrôle chart?

    code de la solution
    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
      Dim oGraphChart As Excel.Chart
                oGraphChart = wbExcel.Charts.Add()
                oGraphChart.Location(Where:=Excel.XlChartLocation.xlLocationAsObject, Name:=wsExcel.Name)
     
                With wbExcel.ActiveChart
     
                    .SetSourceData(Source:=wsExcel.Range(wsExcel.Cells(1, 1), wsExcel.Cells(nbp + 1, u + 1)))
                    .HasTitle = True
                    .ChartTitle.Text = "Suivi des postes de contrôle rongeur du client N°" & frmGestionClt.DTGclient.CurrentRow.Cells.Item(0).Value & ""
                    .ChartTitle.Font.Size = 12
     
                    'Format the embedded chart.
                    .ChartArea.Font.Size = 8
                    .ChartArea.AutoScaleFont = False
                    .ChartType = Excel.XlChartType.xl3DColumn
                    .Application.Update()
     
                End With
    et si un jour vous trouvez la solution pour le contrôle chart, postez la pour qu'il n'ait pas de victimes comme moi

    Les histogrammes ne se touchent pas....c'est ce que je voulais dès le début et puis cela évitent qu'elles cachent les séries qui sont à l'arrière

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2009, 14h07
  2. [JDialog] Problème avec l'aspect modal
    Par TylerKnoxx dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 02/10/2006, 16h20
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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