图表只是隐藏零值

时间:2016-02-18 11:31:24

标签: c# charts bind

我有一个简单的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);    ????

1 个答案:

答案 0 :(得分:0)

DataPoint没有Visible属性,因此您无法隐藏某个点。

对于severaly图表类型,例如点,列或条,您可以通过将DataPoint.Color设置为透明或图表的BackColor来“伪造”隐藏点,但这不适用于折线图因为它会导致一个不可见的线段破坏系列的线条。

您可以为某些DataPoints设置一个属性IsEmpty,但无论您如何设置Series.EmptyPointStyle,结果仍然会打破这些行:

  

对于线型图表,连接线的线条颜色   到空点由Color属性设置决定。

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

相反,我看到两个选项:

  • 您只需删除Y值为零的点。

  • 或者你可以用这样的方式操纵这些点,使它们与其他线条融为一体,好像它们根本不存在一样:为此,你需要将Y值设置为合适的平均值,这样传入和传出线都具有与连接相邻点的线相同的斜率。

当x值区间相等时,后一种方法更简单;真正的问题是你丢失了有关Y值实际为零的信息。您可以在点的Tag属性中注明这一事实。 - 你还需要考虑第一点和最后一点,因为它们只有一个邻居和连续几个沸点......

前一种方式很简单,你可以在一个循环中完成它,实际上是你已经拥有的循环。您可能遇到的问题是当您需要访问这些点的数据时该怎么做。一种选择是收集它们是一个List,或者如果你喜欢在一个字典中索引将是关键。

当然,您无法实际删除DataPoints,因为它们是数据绑定的,因此您需要从DataSource中删除它们,或者如果您愿意,可以创建一个额外的绑定源,而不是零 - 值..:

var arrayNZ = array1.Select(x => x).Where(x => x != 0).ToArray();

您可能需要调整X值才能立即使用!

更新:线条折断的问题可能没有实际意义,所有“隐藏”点都位于图表的一端。

所以你需要做的就是在循环中添加一行:

  arrP.IsValueShownAsLabel = false;                   
  arrP.IsEmpty = true;                   

如果您可以使用Series.DataBind方法将此作为extended property添加到绑定中,则会更简单;但正如我已经展示here,只有一小部分可绑定属性实际上可以用于此调用..

以下是“破损”线条在点的中间看起来的样子: enter image description here