MS 图表中的白色 Space
White Space in MS chart
我有一个包含 12 个数据点的简单图表。问题是它在开始趋势线之前显示了一个小的白色区域。
这是代码
for (int i = 0; i < 12; i++)
{
chart1.Series[0].Points.AddXY(DataTable.Rows[i].ItemArray[0], plotDataTable.Rows[i].ItemArray[1]);
chart1.Series[1].Points.AddXY(DataTable.Rows[i].ItemArray[0], plotDataTable.Rows[i].ItemArray[2]);
chart1.Series[2].Points.AddXY(DataTable.Rows[i].ItemArray[0], DataTable.Rows[i].ItemArray[3]);
chart1.Series[3].Points.AddXY(DataTable.Rows[i].ItemArray[0], DataTable.Rows[i].ItemArray[4]);
}
DataTable的第一列是字符串,其他四列是浮点数。
您需要将 AxisX.Minimum
设置为合适的值。
通常这将是 0
或 第一个 DataPoint
.
的 x 值
但是您添加值的方式将不起作用。
您正在以一种相当不幸的方式添加 DataPoints
,这有时是可以的,但通常情况下它会产生各种问题。
推荐的方法是将 x 值添加为 numbers 或 DateTimes
,这将在内部转换为 doubles
.
但是你加上strings
。这个 看起来 没问题,但是 x 值既不包含这些字符串,也不包含任何其他内容,只包含 0s
。因此你不能使用它们来设置范围或工具提示或缩放范围或计算东西..
但如果您愿意,您仍然可以通过将最小值设置为 1
:
来获得您想要的结果
ChartArea ca = yourChart.ChartAreas[0];
ca.AxisX.Minimum = 1;
我也将 x 值添加为字符串,但它们看起来像数字。
但是推荐的方法是将您的值转换为数字,这样您就可以将它们用于各种事情..
一些注意事项:
此转换由图表完成,如果对 y 值可能但对 x 值 不可能!可能是因为没有数字 y 值的图表根本没有意义,而有时 x 值根本不包含有意义的数字数据,如姓名、ID、邮政编码等。
不要让视觉效果欺骗了您:strings
仅复制到轴标签中;否则他们迷失! (你应该用调试器检查一下!!)
您可能会注意到屏幕截图中 Label 的数量发生了变化。该数字是根据 x 轴的 Interval
计算得出的。默认情况下,它会自动计算 (Interval=double.NaN
) 以适应合理的数量。您可以将其设置为您喜欢的任何距离。通常它指的是轴单位,但在这种情况下指的是点数。将其设置为 2
,每第二个点得到一个 Label
;将其设置为 0.5
以获得 2 Labels
每个 DataPoint
..
使用实数(或数据时间)作为 x 值,您还可以设置间隔类型,例如秒或天..
默认情况下,ChartArea 的 IsStartedFromZero 属性 设置为真。此设置将强制图表始终从零开始。尝试将其设置为 false:
chart1.ChartAreas[0].AxisX.IsStartedFromZero = false;
chart1.ChartAreas[0].AxisY.IsStartedFromZero = false;
for (int i = 0; i < 12; i++)
{
chart1.Series[0].Points.AddXY(DataTable.Rows[i].ItemArray[0], plotDataTable.Rows[i].ItemArray[1]);
chart1.Series[1].Points.AddXY(DataTable.Rows[i].ItemArray[0], plotDataTable.Rows[i].ItemArray[2]);
chart1.Series[2].Points.AddXY(DataTable.Rows[i].ItemArray[0], DataTable.Rows[i].ItemArray[3]);
chart1.Series[3].Points.AddXY(DataTable.Rows[i].ItemArray[0], DataTable.Rows[i].ItemArray[4]);
}
DataTable的第一列是字符串,其他四列是浮点数。
您需要将 AxisX.Minimum
设置为合适的值。
通常这将是 0
或 第一个 DataPoint
.
但是您添加值的方式将不起作用。
您正在以一种相当不幸的方式添加 DataPoints
,这有时是可以的,但通常情况下它会产生各种问题。
推荐的方法是将 x 值添加为 numbers 或 DateTimes
,这将在内部转换为 doubles
.
但是你加上strings
。这个 看起来 没问题,但是 x 值既不包含这些字符串,也不包含任何其他内容,只包含 0s
。因此你不能使用它们来设置范围或工具提示或缩放范围或计算东西..
但如果您愿意,您仍然可以通过将最小值设置为 1
:
ChartArea ca = yourChart.ChartAreas[0];
ca.AxisX.Minimum = 1;
我也将 x 值添加为字符串,但它们看起来像数字。
但是推荐的方法是将您的值转换为数字,这样您就可以将它们用于各种事情..
一些注意事项:
此转换由图表完成,如果对 y 值可能但对 x 值 不可能!可能是因为没有数字 y 值的图表根本没有意义,而有时 x 值根本不包含有意义的数字数据,如姓名、ID、邮政编码等。
不要让视觉效果欺骗了您:
strings
仅复制到轴标签中;否则他们迷失! (你应该用调试器检查一下!!)您可能会注意到屏幕截图中 Label 的数量发生了变化。该数字是根据 x 轴的
Interval
计算得出的。默认情况下,它会自动计算 (Interval=double.NaN
) 以适应合理的数量。您可以将其设置为您喜欢的任何距离。通常它指的是轴单位,但在这种情况下指的是点数。将其设置为2
,每第二个点得到一个Label
;将其设置为0.5
以获得 2Labels
每个DataPoint
..使用实数(或数据时间)作为 x 值,您还可以设置间隔类型,例如秒或天..
默认情况下,ChartArea 的 IsStartedFromZero 属性 设置为真。此设置将强制图表始终从零开始。尝试将其设置为 false:
chart1.ChartAreas[0].AxisX.IsStartedFromZero = false;
chart1.ChartAreas[0].AxisY.IsStartedFromZero = false;