C# 图表仅隐藏零值

C# 图表仅隐藏零值,c#,charts,bind,C#,Charts,Bind,我有一个简单的C#图表绑定代码(它工作得很好),但需要设置一个隐藏零值的循环。该循环还可以使用来自arrDouble3阵列的数据完美地用于数据点arrP 但是现在如何打印修改后的图表(显然最后一行不起作用)。。非常感谢 chart7.Series["Series3"].ChartType = SeriesChartType.Line; chart7.Series["Series3"].Points.DataBindXY(xVal, arrDouble3); foreach (Series se

我有一个简单的C#图表绑定代码(它工作得很好),但需要设置一个隐藏零值的循环。该循环还可以使用来自arrDouble3阵列的数据完美地用于数据点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
来“伪造”隐藏点,但这对折线图不起作用,因为这将导致一个不可见的折线,打断系列的线条

您可以为某些
数据点设置一个属性
,但无论您如何设置,结果仍然会中断:

对于线型图表,连接线的线颜色 空点的颜色由颜色属性设置确定

因此,无论您如何通过添加或数据绑定创建点,都无法隐藏某些点

相反,我看到两种选择:

  • 只需删除Y值为零的点即可

  • 或者,您可以通过这样的方式操纵这些点,使它们与其他线混合,就像它们根本不存在一样:为此,您需要将Y值设置为合适的平均值,以便引入线和引出线与连接相邻点的线具有相同的坡度

当x值间隔相等时,后一种方法更简单;真正的问题是,您丢失了Y值实际上为零的信息。您可以在点的
标记
属性中注意到这一事实。-你还需要考虑第一点和最后一点,因为它们只有一个neighr,并且一行有几个zeor点

前一种方法是直截了当的,你可以在一个循环中完成,事实上,在你已经拥有的循环中。您可能遇到的问题是,当您需要访问这些点的数据时,该怎么做。一种选择是通过列表收集它们,或者如果您喜欢在字典中使用索引作为键

当然,您不能实际删除
数据点,因为它们是数据绑定的,所以您需要将它们从
数据源中删除,或者如果愿意,创建一个附加源进行绑定,而不使用零值

var arrayNZ = array1.Select(x => x).Where(x => x != 0).ToArray();
您可能需要调整X值以立即使用

更新:虚线的问题可能没有意义,因为你所有的“隐藏”点都位于图表的一端

因此,您只需在循环中添加一行:

  arrP.IsValueShownAsLabel = false;                   
  arrP.IsEmpty = true;                   
如果您可以使用
Series.DataBind
方法将其添加到绑定中,则会更简单;但正如我所展示的,实际上只有一小部分可绑定属性可以用于此调用

下面是“断裂”线在点中间的样子:
数据点
没有可见的属性,因此无法真正隐藏点

对于不同的图表类型,如点、列或条形图,您可以通过将
DataPoint.Color
设置为透明或图表的
BackColor
来“伪造”隐藏点,但这对折线图不起作用,因为这将导致一个不可见的折线,打断系列的线条

您可以为某些
数据点设置一个属性
,但无论您如何设置,结果仍然会中断:

对于线型图表,连接线的线颜色 空点的颜色由颜色属性设置确定

因此,无论您如何通过添加或数据绑定创建点,都无法隐藏某些点

相反,我看到两种选择:

  • 只需删除Y值为零的点即可

  • 或者,您可以通过这样的方式操纵这些点,使它们与其他线混合,就像它们根本不存在一样:为此,您需要将Y值设置为合适的平均值,以便引入线和引出线与连接相邻点的线具有相同的坡度

当x值间隔相等时,后一种方法更简单;真正的问题是,您丢失了Y值实际上为零的信息。您可以在点的
标记
属性中注意到这一事实。-你还需要考虑第一点和最后一点,因为它们只有一个neighr,并且一行有几个zeor点

前一种方法是直截了当的,你可以在一个循环中完成,事实上,在你已经拥有的循环中。您可能遇到的问题是,当您需要访问这些点的数据时,该怎么做。一种选择是通过列表收集它们,或者如果您喜欢在字典中使用索引作为键

当然,您不能实际删除
数据点,因为它们是数据绑定的,所以您需要将它们从
数据源中删除,或者如果愿意,创建一个附加源进行绑定,而不使用零值

var arrayNZ = array1.Select(x => x).Where(x => x != 0).ToArray();
您可能需要调整X值以立即使用

更新:虚线的问题可能没有意义,因为你所有的“隐藏”点都位于图表的一端

因此,您只需在循环中添加一行:

  arrP.IsValueShownAsLabel = false;                   
  arrP.IsEmpty = true;                   
如果您可以使用
Series.DataBind
方法将其添加到绑定中,则会更简单;但正如我所展示的,实际上只有一小部分可绑定属性可以用于此调用

下面是“断裂”线在点中间的样子:

您想要实现什么:使数据点不可见,但仍然占用空间或完全抑制它们?实际上,我只是想