删除额外的x轴值

时间:2017-01-20 17:30:37

标签: c# charts dotnetcharting

我在删除x列中的额外值时遇到问题。基本上,我的图形不是从0开始,也不是在我的最后一个数据点结束。我尝试将轴启动为0,并将间隔偏移设置为-20(我的间隔为20)。

有什么方法可以摆脱我数据两边的额外值吗?

string[] xValues = new string[5] { "QE1", "QE2", "QE3", "QE4", $"{DateTime.Now.ToShortDateString()}" };

        PlotBaselines(xValues);

        var amCost = new Series()
        {
            Name = "AmCost",
            Color = Color.Blue,
            IsVisibleInLegend = true,
            IsXValueIndexed = true,
            ChartType = SeriesChartType.Line
        };
        impairmentGraph.Series.Add(amCost);
        // Test Values 0 - 20
        float[] amCostValues = new float[5] { 5, 15, 20, 13, 6 };
        impairmentGraph.Series["AmCost"].Points.DataBindXY(xValues, amCostValues);

这是一个系列的代码。每个都是一样的。

impairmentGraph.ChartAreas[0].AxisY.Maximum = 100; impairmentGraph.ChartAreas[0].AxisY.Interval = 20; impairmentGraph.ChartAreas[0].AxisX.IntervalOffset = -20; impairmentGraph.ChartAreas[0].AxisX.IsStartedFromZero = true;

这是我正在使用的唯一设置代码。

Picture illustrating my issue

1 个答案:

答案 0 :(得分:1)

您需要设置x轴的MinimumMaximum

但是:如果您将x值添加为数字(或日期时间),则可以工作!您的不是!

以下是有助于改变的更改:

将xvalues更改为数字:

 double[] xValues = new double[5] {  1,2,3,4,5 };

将标签放在另一个数组中:

 string[] xLabels = new string[5] { "QE1", "QE2", "QE3", "QE4", 
                                    $"{DateTime.Now.ToShortDateString()}" };

绑定数据后,您需要为AxisLabels设置DataPoints

 for (int i = 0; i < xValues.Length; i++)
            impairmentGraph.Series["AmCost"].Points[i].AxisLabel = xLabels[i];

现在您可以设置x轴显示的范围:

 impairmentGraph.ChartAreas[0].AxisX.Minimum = 1;
 impairmentGraph.ChartAreas[0].AxisX.Maximum = 5;

根据我的数据,结果如下:

enter image description here

请注意,当您将x值添加为string时,它们都会被转换double,从而导致值 0.0d <强>所有积分。 (请在调试器中进行检查!!)因此,您根本不能再使用它们任何;不是用于设置范围,也不是用于格式化标签或用于提供Tooltips等等。

首先将字符串输入AxisLabels的事实误导了许多人认为一切都很顺利,但不是......

另请注意,我总是选择List over arrays并且这个相当固定的数据集不会从数据绑定中获益,特别是因为我们无论如何都需要访问每个DataPoint ..