在 win 图表控件中的位置“0”处隐藏 x 轴上的数据点
Hide data point on x axis at location "0" in win chart controls
我正在绘制如下图所示的图表。在 x 轴上我没有位置“0”,我可以隐藏那个点吗? x 轴上的值从 -35 到 35 不等,其中不存在 0。 x 轴值只是数字。
如果您使用两个数组对 X 轴和 Y 轴进行数据绑定,请在 X 轴数组中找到零值所在的位置,然后添加 X 轴和 Y 轴值,如下所示:
xaxisarray(z) = 0.0 'In case of a double type array
yaxisarray(z) = Double.NaN 'Add a value that is not a number
还要确保在添加上述值之前调整 X 和 Y 轴数组的大小,并将值移动一级,如下所示:
System.Array.Resize(Of Double)(xaxisarray, xaxisarray.Length + 1)
System.Array.Resize(Of Double)(yaxisarray, yaxisarray.Length + 1)
For i As Integer = xaxisarray.Length - 1 To z + 1 Step -1
xaxisarray(i) = xaxisarray(i - 1)
yaxisarray(i) = yaxisarray(i - 1)
Next
您不能自由更改轴标签的文本,也不能跳过其中任何一个,也不能有选择地使它们透明。
但是有两种选择:
- 您可以将轴标签替换为
CustomLabels
。这意味着您需要创建并全部添加它们,每个都有两个数字,分别为 FromPosition
和 ToPosition
,即 CustomLabel
应居中的范围。
通常您可以作弊并使用实际的 x 值并简单地减去/添加一个小值;不要太小,以便标签仍然适合。
如果您明确设置了轴 Interval
(正如您所做的那样),1/2
或 1/3
将是很好的偏移量;或者如果你还设置了 Minumum
和 Maximum
你可以在循环中正确计算范围,见下文!
- 但在你的情况下解决方案简单得多:你可以像这样格式化轴标签:
Axis ax = yourChartArea.AxisX;
ax.AxisX.LabelStyle.Format = "#";
当然这只有效,因为你想隐藏的值是 0
,数字格式可以抑制它。
第一个选项,当然要强大得多。因此,让我们也看一下此选项的示例:
double delta = ax.Interval / 3d;
for (double x = ax.Minimum; x <= ax.Maximum; x+=ax.Interval)
{
CustomLabel cl = new CustomLabel();
cl.ToPosition = x + delta;
cl.FromPosition = x - delta;
cl.Text = x.ToString(); // pick your text/format!
if (x != 0) ax.CustomLabels.Add(cl);
}
两种方法的结果看起来相同:
我正在绘制如下图所示的图表。在 x 轴上我没有位置“0”,我可以隐藏那个点吗? x 轴上的值从 -35 到 35 不等,其中不存在 0。 x 轴值只是数字。
如果您使用两个数组对 X 轴和 Y 轴进行数据绑定,请在 X 轴数组中找到零值所在的位置,然后添加 X 轴和 Y 轴值,如下所示:
xaxisarray(z) = 0.0 'In case of a double type array
yaxisarray(z) = Double.NaN 'Add a value that is not a number
还要确保在添加上述值之前调整 X 和 Y 轴数组的大小,并将值移动一级,如下所示:
System.Array.Resize(Of Double)(xaxisarray, xaxisarray.Length + 1)
System.Array.Resize(Of Double)(yaxisarray, yaxisarray.Length + 1)
For i As Integer = xaxisarray.Length - 1 To z + 1 Step -1
xaxisarray(i) = xaxisarray(i - 1)
yaxisarray(i) = yaxisarray(i - 1)
Next
您不能自由更改轴标签的文本,也不能跳过其中任何一个,也不能有选择地使它们透明。
但是有两种选择:
- 您可以将轴标签替换为
CustomLabels
。这意味着您需要创建并全部添加它们,每个都有两个数字,分别为FromPosition
和ToPosition
,即CustomLabel
应居中的范围。
通常您可以作弊并使用实际的 x 值并简单地减去/添加一个小值;不要太小,以便标签仍然适合。
如果您明确设置了轴 Interval
(正如您所做的那样),1/2
或 1/3
将是很好的偏移量;或者如果你还设置了 Minumum
和 Maximum
你可以在循环中正确计算范围,见下文!
- 但在你的情况下解决方案简单得多:你可以像这样格式化轴标签:
Axis ax = yourChartArea.AxisX;
ax.AxisX.LabelStyle.Format = "#";
当然这只有效,因为你想隐藏的值是 0
,数字格式可以抑制它。
第一个选项,当然要强大得多。因此,让我们也看一下此选项的示例:
double delta = ax.Interval / 3d;
for (double x = ax.Minimum; x <= ax.Maximum; x+=ax.Interval)
{
CustomLabel cl = new CustomLabel();
cl.ToPosition = x + delta;
cl.FromPosition = x - delta;
cl.Text = x.ToString(); // pick your text/format!
if (x != 0) ax.CustomLabels.Add(cl);
}
两种方法的结果看起来相同: