我正在尝试在C#windows窗体应用程序中绘制一个简单的图表。 绘制此图表的数据将以运行时为单位。 问题是它没有参考X轴值绘制图表上的唯一点。例如,对于两个点(5,1)和(5,3),它在X轴上显示“5”值两次。
我尝试寻找类似问题的解决方案,但都没有帮助。 以下是我的代码的外观: (我故意在click事件处理程序中移动声明以便于参考)
private void button1_Click(object sender, EventArgs e)
{
Series series3 = new Series
{
Name = "Series3",
Color = System.Drawing.Color.Red,
IsVisibleInLegend = false,
IsXValueIndexed = true,
ChartType = SeriesChartType.Line
};
double startPosition = 2;
double endPosition = 4;
double startForceLow = 1;
double startForceHigh = 3;
double endForceLow = 5;
double endForceHigh = 7;
chart1.Series.Clear();
this.chart1.Series.Add(series3);
double[] xPoints = { startPosition, startPosition, endPosition, endPosition, startPosition };
double[] yPoints = { startForceLow, startForceHigh, endForceHigh, endForceLow, startForceLow };
//Adding individual points too does not work
//series3.Points.AddXY(startPosition, startForceLow);
//series3.Points.AddXY(startPosition, startForceHigh);
//series3.Points.AddXY(endPosition, endForceHigh);
//series3.Points.AddXY(endPosition, endForceLow);
//series3.Points.AddXY(startPosition, startForceLow);
chart1.Series["Series3"].XValueType = ChartValueType.Double;
chart1.Series["Series3"].YValueType = ChartValueType.Double;
chart1.Series["Series3"].Points.DataBindXY(xPoints, yPoints);
chart1.Invalidate();
}
答案 0 :(得分:0)
原因是您告诉图表忽略 X-Values
并使用他们的索引代替它们:
IsXValueIndexed = true
删除该行或将该属性设置为默认 false
!
结果:
有关说明,请参阅here on MSDN:
True 如果属于系列的数据点的索引为 用于X值; false 如果他们不。默认值为 false 。
在极少数情况下这是有用的,但你的不是其中之一。实际上Line
图表几乎没有;但有些图表却很好地利用它......:
系列中的所有数据点都使用顺序索引,如果是这样的话 属性为true,则数据点将按顺序绘制, 无论其相关的X值如何。这意味着会有 没有“缺失”的数据点 ...
...
当您不希望缺少数据点时,这非常有用 您知道自己没有数据的时间间隔,例如周末。重要
如果您正在显示多个系列,并且至少有一个系列使用索引的X值,那么所有系列都必须对齐 - 也就是说,具有 相同数量的数据点 - 相应的点必须具有 相同的X值。