1

我无法删除 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;

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

图片说明我的问题

4

1 回答 1

1

您需要设置 x 轴的Minimumand Maximum

但是:这只有在您将 x 值添加为数字(或日期时间)时才有效你的不是!

以下是有帮助的更改:

将 xvalues 更改为数字:

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

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

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

绑定数据后,您需要AxisLabelsDataPoints

 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;

使用我的数据,结果如下所示:

在此处输入图像描述

请注意,当您添加 x 值时,string它们将全部转换所有点double的值0.0d 。(一定要在调试器中检查这个!!)因此你不能再将它们用于任何事情;不适用于设置范围,也不适用于格式化标签或进纸等。Tooltips

字符串首先被送入的事实AxisLabels误导了许多人认为一切都很好,但事实并非如此......

另请注意,我总是选择 List 而不是数组,而且这组相当固定的数据并不能真正从数据绑定中受益,尤其是因为我们DataPoint无论如何都需要访问每个数据。

于 2017-01-20T18:16:04.920 回答