2017-01-08 1 views
0

points sur mon deuxième tableau ne correspondent pas à y axe que vous pouvez voir ici:Points sur graphique graphique ne correspondent pas à y lignes

enter image description here

valeurs des points sont 50,0000 exactement, 49,9999, 49,9998 et 50.0001. Mais ils ne sont pas sur les lignes. Et quand j'ajoute un point et que j'augmente le nombre de valeurs sur l'axe des ordonnées, alors les points correspondent à l'axe des ordonnées, comme dans ce picture.

Voici mon code (désolé pour les valeurs de texte serbe)

TacnostVage tacnost = bazaPodataka.UcitajTacnostVage(Convert.ToString(dataGridView2.SelectedRows[0].Cells[2].Value), Convert.ToInt32(comboBox18.Text)); 
      List<TestTacnostVage> testoviTacnost = bazaPodataka.UcitajTestoveTacnostVage(Convert.ToString(dataGridView2.SelectedRows[0].Cells[2].Value), Convert.ToInt32(comboBox18.Text)); 

      chart2.ChartAreas.Clear(); 
      chart2.Series.Clear(); 
      prikažiToolStripMenuItem.DropDownItems.Clear(); 
      tabeluToolStripMenuItem.DropDownItems.Clear(); 

      string format = Convert.ToString(vaga.Podeljak); 
      format = format.Remove(format.Length - 1, 1) + "0"; 

      if (testoviTacnost.Count != 0) 
      { 
       for (int i = 0; i < tacnost.NominalneMase.Count(); i++) 
       { 
        ChartArea area = new ChartArea(); 
        Series series = new Series(); 

        area.AxisY.MajorGrid.LineColor = Color.LightGray; 
        area.AxisX.MajorGrid.LineColor = Color.LightGray; 
        area.AxisY.LabelStyle.Format = format; 
        area.BorderColor = Color.LightGray; 
        area.BorderDashStyle = ChartDashStyle.Solid; 
        area.AxisY.Interval = vaga.Podeljak; 
        area.Name = "ChartArea" + (i + 1); 
        series.ChartType = SeriesChartType.Point; 
        series.ChartArea = "ChartArea" + (i + 1); 
        series.Name = "Tačka" + (i + 1); 

        string text = ""; 
        TegoviTacnostVaga tegoviTacnost = bazaPodataka.UcitajTegoveTacnostVage(Convert.ToString(dataGridView2.SelectedRows[0].Cells[2].Value), Convert.ToInt32(comboBox18.Text), i); 
        if (tegoviTacnost != null) 
        { 
         for (int j = 0; j < tegoviTacnost.Proizvodjac.Count(); j++) 
         { 
          text += tegoviTacnost.Proizvodjac[j] + " "; 
          text += tegoviTacnost.SerijskiBrojevi[j] + " "; 
          text += tegoviTacnost.NominalneMase[j] + "g"; 
          text += (j == tegoviTacnost.Proizvodjac.Count() - 1 ? "" : "\n"); 
         } 
        } 

        series.LegendText = (text == "" ? "Nema podataka" : text); 

        for (int j = 0; j < testoviTacnost.Count(); j++) 
         series.Points.AddXY(testoviTacnost[j].RedniBrojTesta, testoviTacnost[j].RezultatiMerenja[i]); 

        area.AxisY.StripLines.Add(new StripLine() { BorderColor = Color.Red, IntervalOffset = (tacnost.RezultatiMerenja[i].Average() + koeficijentTacnost * ponovljivost.ReferentnaVrednost), Text = "Gornja granica: " + Convert.ToDouble(tacnost.RezultatiMerenja[i].Average() + koeficijentTacnost * ponovljivost.ReferentnaVrednost).ToString(format) }); 
        area.AxisY.StripLines.Add(new StripLine() { BorderColor = Color.Red, IntervalOffset = (tacnost.RezultatiMerenja[i].Average() - koeficijentTacnost * ponovljivost.ReferentnaVrednost), Text = "Donja granica: " + Convert.ToDouble(tacnost.RezultatiMerenja[i].Average() - koeficijentTacnost * ponovljivost.ReferentnaVrednost).ToString(format) }); 

        area.AxisY.Maximum = area.AxisY.StripLines[0].IntervalOffset + area.AxisY.Interval; 

        if (series.Points.FindMaxByValue().YValues[0] >= area.AxisY.Maximum) 
         area.AxisY.Maximum = series.Points.FindMaxByValue().YValues[0] + area.AxisY.Interval; 

        area.AxisY.Minimum = area.AxisY.StripLines[1].IntervalOffset - area.AxisY.Interval; 

        if (series.Points.FindMinByValue().YValues[0] <= area.AxisY.Minimum) 
         area.AxisY.Minimum = series.Points.FindMinByValue().YValues[0] - area.AxisY.Interval; 

        chart2.ChartAreas.Add(area); 
        chart2.Series.Add(series); 
       } 
      } 
+0

Que voulez-vous dire ba 'y-lines'? Les Striplines? (Ceux-ci sont placés à une moyenne calculée, n'est-ce pas?) Les DataPoints reposent bien sur les Gridlines, n'est-ce pas? – TaW

+0

Eh bien, vous avez édité une mauvaise image. C'était la première image quand j'ai téléchargé la question: https://i.stack.imgur.com/y3ryx.png. Dans cette image, les points de données ne correspondent pas aux GridLines. –

+0

Hm, désolé. Quelle est la valeur ici: 'area.AxisY.Interval = vaga.Podeljak;'. Donc, juste en ajoutant quelques points l'autre changement de position ?? Ne peut pas être. Ou est-ce que les Gridlines bougent? – TaW

Répondre

0

Je trouve la solution, mais je ne sais pas si cette explication est vrai. Le problème était Axis-Y maximum. Les graphiques Axe-Y intervalle était 0,0001 (4 décimales), mais dans mon code, j'ai mis maximum à StripLines IntervalOffset (qui était plus de 4 décimales) plus Charts Interval (dans le résultat qui est plus de 4 décimales). Il est donc probable que cela se produise lorsque votre maximum Chars Axis-Y et votre intervalle (si vous définissez Interval) ont un nombre différent de décimales. Donc j'ai simplement arrondi les lignes de bande InvervalOffset à 4 décimales (dans ce cas), et mis Axis-Y Maximum à avoir 4 décimales comme Interval.