C#图表如何设置X轴的起点

C# chart How to Set start points of X axis

我正在使用 C# 图表和参考。至 C# - How do you make a chart object start at 0 on the X axis?

这是我的示例数据:

     X        Value ( From _LOWER )
======================
    0           0
    0.5        100
    1.0        200
    1.5        300
    2.0        400
    2.5        500
    4.0        600
    5.0        700
    7.5        800
    10.0       900
    12.5       1000

我正在使用以下代码:

chart1.Series.Clear();
chart1.ChartAreas[0].AxisY.Interval = 200;
chart1.ChartAreas[0].AxisX.Interval =  0.5;
chart1.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount ;
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Number;
chart1.ChartAreas[0].AxisX.Minimum = 0;
chart1.ChartAreas[0].AxisX.IsStartedFromZero = true;
chart1.ChartAreas[0].AxisY.Minimum = 0;

chart1.Series.Add("Trial 1");
chart1.Series["Trial 1"].ChartType = SeriesChartType.Line;
chart1.Series["Trial 1"].BorderWidth = 2;
chart1.Series["Trial 1"].XValueType = ChartValueType.String;
chart1.Series["Trial 1"].IsValueShownAsLabel = true;

this.chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.DashDotDot;
this.chart1.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.DashDotDot;
this.chart1.ChartAreas[0].IsSameFontSizeForAllAxes = true;

DataRowCollection _dr = _CObjectsofClasses._obj_CDatabase._MGetDataRows("select _LOWER from tblCHART ORDER BY [_CHARTID]");
foreach (DataRow _drRow in _dr)
   {
     chart1.Series["Trial 1"].Points.AddY(_drRow[0]);
   }

这是输出

正如你在图表中看到的值从1开始,但它应该从0开始,如图所示100显示在2而不是0.5,200显示在3而不是1等等。 ...

请指出我哪里错了。

更新

如果我使用代码(添加 XY 轴)

DataRowCollection _dr =    _CObjectsofClasses._obj_CDatabase._MGetDataRows("select _SNAME, _LOWER from tblCHART ORDER BY [_CHARTID]");
foreach (DataRow _drRow in _dr)
{  
   chart1.Series["Trial 1"].Points.AddXY(_drRow[0], _drRow[1]);
}

然后我得到输出

没有得到 0.5 个间隔和零显示 2 次

如果您想控制 X-Values,您应该使用 AddXY 方法添加 DataPoints

使用这个

for (int i = 0; i < 15; i++) chart1.Series["Trial 1"].Points.AddY(i * 50);

或这个

for (int i = 0; i < 15; i++) chart1.Series["Trial 1"].Points.AddXY(i, i * 50);

这两个图表中的结果..:[=​​22=]

剩下的就是您的代码。 (大小差异仅来自手动调整大小..)

第一个版本的X-Values值得一看:都是0!

在你的情况下你应该写:

int i = 0;
foreach (DataRow _drRow in _dr)
{  
    chart1.Series["Trial 1"].Points.AddXY(i++, _drRow[1]);
}

顺便说一句,您可能需要重新考虑将 X-Values 设置为 string;这通常会让您几乎无法控制..

使用 AddXY 设置 x/y 点后,将最小值更改为 double.NaN 并将 IsMarginVisible 设置为 false

    chart1.ChartAreas[0].AxisX.Minimum = double.NaN;
    chart1.ChartAreas[0].AxisX.IsMarginVisible = false;
    chart1.ChartAreas[0].AxisY.Minimum = double.NaN;
    chart1.ChartAreas[0].AxisY.IsMarginVisible = false;