C#chart如何设置X轴的起点

时间:2015-06-06 09:38:03

标签: c# sql-server charts

我正在使用C#chart和ref。到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]);
   }

这是输出

Chart Out Put

正如您在图表中看到的那样,值从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]);
}

然后我得到输出

enter image description here

没有获得0.5个间隔而零显示2次

2 个答案:

答案 0 :(得分:2)

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

使用此

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

产生这两个图表..:

enter image description here enter image description here

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

值得研究第一个版本的X-Values:它们都是0

在你的情况下你应该写:

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

顺便说一句,您可能需要重新考虑将X-Values设置为string;这通常会让你只有很少的控制..

答案 1 :(得分:1)

使用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;