我正在使用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]);
}
这是输出
正如您在图表中看到的那样,值从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次
答案 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);
产生这两个图表..:
剩下的就是你的代码。 (尺寸差异仅来自手动调整大小..)
值得研究第一个版本的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;