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 :

Chart : superposer 2 séries


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut Chart : superposer 2 séries
    Bonjour à tous,

    Je dois créer un graphique avec plusieurs séries, dont 2 font parties d'un même groupe et j'ai besoin de les superposer :

    voici mon code :
    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
     
     Dim Chart2 As New Chart
     Dim ChartArea1 As New ChartArea()
     Chart2.ChartAreas.Add(ChartArea1)
     
    Chart2.Series.Add(Type)
    Chart2.Series(Type).ChartArea = "ChartArea1"
     
    For i = 0 To DtFrise.Rows.Count - 1
                Dim arg As Integer
     
                Dim D_Ouverture As Date = ReadItemDateDt(DtFrise, i, "DEBUT")
                Dim D_Fermeture As Date = ReadItemDateDt(DtFrise, i, "FIN")
     
                Select Case ReadItemDt(DtFrise, i, "TYPE")
                    Case "TITI", "TOTO" : arg = 1
                    Case "NETT" : arg = 2
                    Case "PAUSE" : arg = 3
                End Select
     
               ' création des points de la série
                    Dim p As New DataPoint
                    p.XValue = arg
                    p.YValues = {D_Ouverture.ToOADate(), D_Fermeture.ToOADate()}
     
              ' ajout du point
     
                    Chart2.Series(ReadItemDt(DtFrise, i, "TYPE")).Points.Add(p)
                    Chart2.Series(ReadItemDt(DtFrise, i, "TYPE")).Enabled = True
     
     Next
     
            Dim bmp As New Bitmap(Chart2.Width, Chart2.Height)
            Chart2.DrawToBitmap(bmp, Chart2.DisplayRectangle)
            bmp.MakeTransparent(BackColor)
            Dim MonImage As Image = bmp
    y-a t-il une option pour superposer les séries ? car l'ajout de points pour le type TITI et TOTO se fait bien avec le même "arg". Je ne comprends pas.
    sur l'image en vert TITI et en bleu turquoise "TOTO". (j'ai supprimé d'autres séries inutiles pour mon exemple).
    Ce qui est étrange c'est qu'il y a un grand intervalle entre les deux séries TITI et TOTO.

    Merci pour votre aide, je bloque depuis 2 jours.
    Images attachées Images attachées   

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Le peu que je connais en matière de Chart est résumé dans le projet test ci-joint : Chart.zip
    Il permet au moins l'affichage de 2 séries de valeurs.

    J' espère que ça t'inspirera ...

    Nom : Chart.jpg
Affichages : 380
Taille : 49,0 Ko

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2018
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Bonjour

    Merci pour ta réponse, mais ce que je veux faire c'est mettre 2 séries sur le même axe X..
    je ne sais pas si c'est possible avec le chart, car en mettant le même indice x pour 2 séries, elles ne se superposent pas.

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Je pense que la superposition est possible si la représentation le permet, ce qui ne serait pas la cas des barres. Il faudrait décider laquelle doit être devant l'autre et les plus petites valeurs des barres arrières ne seraient pas visibles.


    Si le graphe est fait avec des lignes (par exemple), ou un des deux graphes est fait avec les lignes, la superposition est possible.

    En modifiant le code que j'ai envoyé, tu peux obtenir les graphes ci-dessous (je te remets le projet pour les tests : Chart 2.zip).

    Nom : Chart1.jpg
Affichages : 386
Taille : 95,9 Ko

  5. #5
    Membre du Club
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2018
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Merci je vais regarder.

    J'ai déjà fait des tests avec ton fichier. je veux des barres horizontales. l'une sur l'autre avec une couleur différente..
    je vais voir de nouveau.

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Des barres horizontales, c'est facile. Dans mon code de ce matin, tu remplaces les SeriesChartType.Line par des SeriesChartType.Bar.

    Mais comment vas-tu décider quelle est la barre avant et quelle est la barre arrière ? sachant que si l'arrière est moins longue que celle qui est devant, elle ne sera pas visible.

    Bon amusement ...

    Nom : Chart2.jpg
Affichages : 397
Taille : 52,1 Ko

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Peut-être ce modèle te conviendra-t-il mieux ?

    Attention, les valeurs ne sont pas superposées, mais seulement empilées (les barres de couleur orange après celle de couleur bleue).

    La recette est d'utiliser: SeriesChartType.StackedBar.

    Nom : Chart3.jpg
Affichages : 371
Taille : 45,8 Ko

  8. #8
    Membre du Club
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2018
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juin 2018
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Merci Phil,

    oui c'est cette série que j'utilise....reste à superposer car j'ai des valeurs identiques

  9. #9
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Je ne comprends toujours pas ce que tu veux dire avec "superposer".

    Avec 2 valeurs identiques, tu obtiendras 2 barres de même longueur présentées bout à bout.
    Aucune des 2 ne masquera l'autre puisqu'il ne s'agit pas de "superposition".


  10. #10
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Points : 109
    Points
    109
    Par défaut
    @maysa56 je comprend ce que tu veux dire par superposer mais je pense pas que ça soit faisable avec le control "Chart" de base du .net

    faudrait peut être trouver une alternative au control "chart"

    si tu tiens vraiment à utiliser le control "chart" ça reste faisable mais d'une façon un peu "farfelue" mais relativement simple :

    suposant tu veux afficher ces 2 valeurs avec des barres superposées A = 20 et B = 10

    1) tu met tous tes Chart.Type en SeriesChartType.StackedBar

    2) tu commence par afficher la valeur la plus petite (B ici), et pour la prochaine valeur tu fait (la valeur la plus grande - la plus petite) (A - B ici)
    // tu doit faire ça dans un nouveau DataTable qui servira que pour l'affichage
    // quand je dit tu commence par afficher B je veux dire : tu met la valeur de dans la Chart1.Series(0) pour qu'elle soit afficher en premier

    3) et puis tout ce qu'il te reste à faire c'est de corriger les couleurs de chaque Point (barre) avec : Chart1.Series(i).Points(j).Color = ...

    alors oui je sais, je suis terrible pour expliquer les choses alors je vais t'ecrir un example en code, car y'a rien de mieux que du code pour expliquer une logique


    Edit :
    le projet en Zip :
    Chart Superposé.zip

    Photo du résultat :
    Nom : ttu.JPG
Affichages : 330
Taille : 34,7 Ko

    le code : //le code est bien sur optimisable, je l'ai fait simple pour que tu comprenne sa logique facilement
    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
    Imports System.Data.OleDb
    Imports System
    Imports System.Windows.Forms.DataVisualization.Charting
     
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim TesDonnées As New DataTable
            TesDonnées.Columns.Add("ANNEE")
            TesDonnées.Columns.Add("BTA")
            TesDonnées.Columns.Add("OTA")
     
            TesDonnées.Rows.Add(2011, 51560, 0)
            TesDonnées.Rows.Add(2012, 119400, 0)
            TesDonnées.Rows.Add(2013, 301000, 49011)
            TesDonnées.Rows.Add(2014, 257400, 407056)
            TesDonnées.Rows.Add(2015, 430100, 156760)
            TesDonnées.Rows.Add(2016, 796765, 194657)
            TesDonnées.Rows.Add(2017, 843941, 944800)
            TesDonnées.Rows.Add(2018, 1538097, 110731)
            TesDonnées.Rows.Add(2019, 1577678, 344345)
     
            '----------------------------------------------------------------
     
            Dim PourL_Affichage As New DataTable
            PourL_Affichage.Columns.Add("ANNEE")
            PourL_Affichage.Columns.Add("BTA")
            PourL_Affichage.Columns.Add("OTA")
     
            Dim Liste_pour_la_correction_des_couleurs As New List(Of Byte)
     
            Chart1.Series.RemoveAt(0)
            Chart1.Series.Add("BTA")
            Chart1.Series.Add("OTA")
     
            Chart1.Series("BTA").XValueMember = "ANNEE"
            Chart1.Series("BTA").YValueMembers = "BTA"
     
            Chart1.Series("OTA").XValueMember = "ANNEE"
            Chart1.Series("OTA").YValueMembers = "OTA"
     
            Chart1.Series(0).ChartType = SeriesChartType.StackedBar
            Chart1.Series(1).ChartType = SeriesChartType.StackedBar
     
            'Superposition des valeurs
            For Each item As DataRow In TesDonnées.Rows
                Dim A As Double = item(1)
                Dim B As Double = item(2)
     
                Dim couleur As Byte = 0
     
                If B > A Then
                    B -= A
                    PourL_Affichage.Rows.Add(item(0), A, B)
                ElseIf A > B Then
                    A -= B
                    couleur = 1
                    PourL_Affichage.Rows.Add(item(0), B, A)
                Else 'A = B donc
                    B = 0
                    couleur = 2
                    PourL_Affichage.Rows.Add(item(0), A, B)
                End If
     
                Liste_pour_la_correction_des_couleurs.Add(couleur)
            Next
     
            Chart1.DataSource = PourL_Affichage
     
            'j'utilise un ptit thread pour ça car j'ai la flemme d'aller chercher l'event de quand le Chart1 finnit de se charger
            Dim ttt As New Threading.Thread(Sub()
                                                Threading.Thread.Sleep(100)
     
                                                Me.Invoke(Sub()
                                                              'Correction des Couleurs
                                                              For i = 0 To Liste_pour_la_correction_des_couleurs.Count - 1
                                                                  If Liste_pour_la_correction_des_couleurs(i) = 0 Then
                                                                      Chart1.Series(0).Points(i).Color = Color.RoyalBlue
                                                                      Chart1.Series(1).Points(i).Color = Color.Orange
                                                                  ElseIf Liste_pour_la_correction_des_couleurs(i) = 1 Then
                                                                      Chart1.Series(0).Points(i).Color = Color.Orange
                                                                      Chart1.Series(1).Points(i).Color = Color.RoyalBlue
                                                                  Else 'si A et B ont la même valeur je vais collorier la barre en rouge
                                                                      Chart1.Series(0).Points(i).Color = Color.Red
                                                                  End If
                                                              Next
                                                          End Sub)
                                            End Sub) : ttt.Start()
     
        End Sub
    End Class

Discussions similaires

  1. Aligner/Superposer les séries dans un chart
    Par GavrocheNET dans le forum VB.NET
    Réponses: 7
    Dernier message: 17/05/2016, 16h31
  2. [XL-2010] Superposer 2 séries sur histogramme pour afficher un gap
    Par Pdeboissieu dans le forum Excel
    Réponses: 1
    Dernier message: 09/10/2014, 11h51
  3. Superposer deux séries en trait plein
    Par sssssssam dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 22/05/2009, 13h05
  4. [JPanel] superposer des JPanel
    Par Galima dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 10/06/2004, 18h25
  5. [Kylix] Kylix: acces aux portx séries
    Par ghost942 dans le forum EDI
    Réponses: 4
    Dernier message: 03/02/2003, 21h10

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