簡體   English   中英

圖表圖形上的點不適合y線

[英]Points on chart graphic don't fit y-lines

您在這里看到的第二張圖表上的點不適合y軸:

在此處輸入圖片說明

點值正好是50.0000、49.9999、49.9998和50.0001。 但是他們不在線上。 當我添加點並隨之增加y軸上的值數量時,則點將適合y軸,如該圖所示

這是我的代碼(對不起,塞爾維亞文字值)

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);
                }
            }  

我找到了解決方案,但不確定該解釋是否正確。 問題是Axis-Y最大值。 圖表Axis-Y間隔為0.0001(4個十進制),但是在我的代碼中,我將最大值設置為StripLines IntervalOffset(大於4個十進制)加上圖表間隔(結果大於4個十進制)。 因此,當您的Chars軸Y最大值和時間間隔(如果設置了時間間隔)具有不同的小數位數時,可能會發生這種情況。 因此,我只是簡單地將帶狀線InvervalOffset舍入為4個小數(在這種情況下),然后將Axis-Y Maximum像Interval那樣具有4個小數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM