图表仅隐藏零值
Chart simply hiding zero values
我有一个简单的 C# 图表绑定代码(运行良好),但需要设置一个循环来隐藏零值。该循环也非常适用于使用 arrDouble3 数组中的数据的 DataPoint arrP。
但是现在如何打印修改后的图表(显然最后一行不起作用)..非常感谢。
chart7.Series["Series3"].ChartType = SeriesChartType.Line;
chart7.Series["Series3"].Points.DataBindXY(xVal, arrDouble3);
foreach (Series series in chart7.Series)
{
foreach (DataPoint arrP in series.Points)
{
if (arrP.YValues.Length > 0 && (double)arrP.YValues.GetValue(0) == 0)
{
arrP.IsValueShownAsLabel = false;
}
}
}
chart7.Series["Series3"].Points.DataBindXY(xVal, arrP); ????
DataPoint
没有一个Visible
属性,所以你真的不能隐藏点。
对于一些图表类型,如点、柱或条,您可以通过将 DataPoint.Color
设置为透明或图表的 BackColor
来 'fake' 隐藏点,但这不起作用对于折线图,因为它会产生一个不可见的线段,从而打破系列的线。
有一个 属性 IsEmpty
which you can set for some DataPoints
but the result will still break the lines, no matter how you set the Series.EmptyPointStyle
:
In the case of line-type charts, the line color for lines that connect
to an empty point is determined by the Color property setting.
因此,无论您如何创建点,通过添加或数据绑定,您都无法隐藏一些点。
相反,我看到了两个选项:
您可以简单地删除 Y 值为零的点。
或者您可以操纵这些点,使它们与其他线条融合在一起,就好像它们根本不存在一样:为此,您需要将 Y 值设置为合适的平均值,使入线和出线具有与连接相邻点的线相同的斜率。
当x值区间相等时,后一种方法更简单;真正的问题是您丢失了有关 Y 值实际上为零的信息。您可以在 Tag
属性 的要点中注明这一事实。 - 你还需要考虑第一个和最后一个点,因为它们只有一个邻居并且连续有几个 zeor-points..
前一种方法很直接,你可以在一个循环中完成,实际上在你已经有了的循环中。您在这里可能遇到的问题是当您需要访问这些点的数据时该怎么做。一种选择是将它们收集到一个列表中,或者如果您更喜欢在索引将是键的字典中。
当然你不能真正删除 DataPoints
因为它们是数据绑定的,所以你需要从 DataSource
中删除它们,或者如果你愿意,创建一个额外的绑定源而不零值..:[=27=]
var arrayNZ = array1.Select(x => x).Where(x => x != 0).ToArray();
您可能需要调整 X 值才能立即使用!
更新:虚线的问题可能没有实际意义,因为你所有的 'hidden' 点都位于图表的一端。
所以您需要做的就是在循环中添加一行:
arrP.IsValueShownAsLabel = false;
arrP.IsEmpty = true;
如果您可以将其添加为一个 extended property to the binding by using the Series.DataBind
method; but as I have shown here 将更简单,只有一小部分可绑定属性实际适用于此调用..
下面是 'broken' 线位于点中间时的样子:
我有一个简单的 C# 图表绑定代码(运行良好),但需要设置一个循环来隐藏零值。该循环也非常适用于使用 arrDouble3 数组中的数据的 DataPoint arrP。
但是现在如何打印修改后的图表(显然最后一行不起作用)..非常感谢。
chart7.Series["Series3"].ChartType = SeriesChartType.Line;
chart7.Series["Series3"].Points.DataBindXY(xVal, arrDouble3);
foreach (Series series in chart7.Series)
{
foreach (DataPoint arrP in series.Points)
{
if (arrP.YValues.Length > 0 && (double)arrP.YValues.GetValue(0) == 0)
{
arrP.IsValueShownAsLabel = false;
}
}
}
chart7.Series["Series3"].Points.DataBindXY(xVal, arrP); ????
DataPoint
没有一个Visible
属性,所以你真的不能隐藏点。
对于一些图表类型,如点、柱或条,您可以通过将 DataPoint.Color
设置为透明或图表的 BackColor
来 'fake' 隐藏点,但这不起作用对于折线图,因为它会产生一个不可见的线段,从而打破系列的线。
有一个 属性 IsEmpty
which you can set for some DataPoints
but the result will still break the lines, no matter how you set the Series.EmptyPointStyle
:
In the case of line-type charts, the line color for lines that connect to an empty point is determined by the Color property setting.
因此,无论您如何创建点,通过添加或数据绑定,您都无法隐藏一些点。
相反,我看到了两个选项:
您可以简单地删除 Y 值为零的点。
或者您可以操纵这些点,使它们与其他线条融合在一起,就好像它们根本不存在一样:为此,您需要将 Y 值设置为合适的平均值,使入线和出线具有与连接相邻点的线相同的斜率。
当x值区间相等时,后一种方法更简单;真正的问题是您丢失了有关 Y 值实际上为零的信息。您可以在 Tag
属性 的要点中注明这一事实。 - 你还需要考虑第一个和最后一个点,因为它们只有一个邻居并且连续有几个 zeor-points..
前一种方法很直接,你可以在一个循环中完成,实际上在你已经有了的循环中。您在这里可能遇到的问题是当您需要访问这些点的数据时该怎么做。一种选择是将它们收集到一个列表中,或者如果您更喜欢在索引将是键的字典中。
当然你不能真正删除 DataPoints
因为它们是数据绑定的,所以你需要从 DataSource
中删除它们,或者如果你愿意,创建一个额外的绑定源而不零值..:[=27=]
var arrayNZ = array1.Select(x => x).Where(x => x != 0).ToArray();
您可能需要调整 X 值才能立即使用!
更新:虚线的问题可能没有实际意义,因为你所有的 'hidden' 点都位于图表的一端。
所以您需要做的就是在循环中添加一行:
arrP.IsValueShownAsLabel = false;
arrP.IsEmpty = true;
如果您可以将其添加为一个 extended property to the binding by using the Series.DataBind
method; but as I have shown here 将更简单,只有一小部分可绑定属性实际适用于此调用..
下面是 'broken' 线位于点中间时的样子: