图表xAxis中意外的副作用设置点颜色

时间:2019-06-06 20:09:20

标签: c# charts

我正在使用point.IsEmpty隐藏图表中的某些点(异常值)。我的工作很好,但是我发现有些奇怪。如果恢复图表颜色,则当该点隐藏或不隐藏时,它会显示在其他位置。我什至不必恢复颜色;如果我仅获取并存储相同的颜色值,就会出现副作用。

Color c = SavedColoredPoints[i].Color;;

foreach (DataPoint p in ChartScatter.Series[i].Points)
{
    Debug.Assert(!p.Color.IsEmpty);  // want to show all have been initialized 
    Color ThisC = p.Color;
    p.Color = ThisC;
    // p.Color = c;
}

ChartScatter.Series[i].Color = c;

上面的代码在运行时并未断言,因为所有颜色均已初始化。 在网上搜索将颜色设置为点的问题时,我发现建议对所有系列都使用透明的空点。没有效果。

ChartScatter.Series[seriesname].EmptyPointStyle.Color = Color.Transparent;

我还阅读了Microsoft的这个旧博客,有关设置点颜色: Setting Microsoft Chart Series Colors

问题示例:一个系列中有12个点。如果我将所有12个点都标记为“ IsEmpty”,它们将显示在图表上。如果我不恢复默认颜色,则点将保持隐藏,就像它们应该那样:

RedDots

上面的红点不应该在那里。如果我“隐藏”原始点,它们往往会显示在删除点附近。它们实际上消失了,但立即像魔术一样靠近或高于它们。如果隐藏了12个中的最后一个“ IsEmpty”,则所有12个都会在60秒标记后显示。 x和y值都是正确的,但应将其隐藏。 OTOH如果我还没有“恢复默认颜色”,那么当我取消隐藏它们时,它们将保持隐藏状态,并且图表的行为就像我想要的那样。

1 个答案:

答案 0 :(得分:0)

这肯定看起来像MSChart中的错误。

但是,如果您正确看待它,则可能背后有一定逻辑。

这似乎是发生了什么:图表显示的empty DataPoints并不带有其实际y值,而是位于它们之前的最后一个非空点之一。

>

结果看起来很愚蠢,因此在您的情况下,它可以作为错误。 Otoh,您使用IsEmpty属性的方式不是 meant 的意思:它是将数据的某些部分标记为“丢失”;因此,假设这些点始终没有有效的y值。但是对于许多图表类型,这可能会导致奇怪的结果,因此它会保留最后一个有效值

一个经典的例子是带有每日数据但在周末没有有意义数据的图表。如果遗漏了丢失的数据,某些事情将无法工作,因此将插入空的虚拟点。 (实际上甚至有一个功能可以做到这一点。)

(请注意,这只是我的解释,不是文档功能!)

这不会导致您看到有趣的显示,因为您已经将EmptyPointStyle.Color设置为Transparent。但是:现在,您可以更改所有点的颜色,并且此会覆盖系列样式和颜色中的颜色:有趣的显示..

enter image description here

解决方案:

  • 您可以在Rescale函数中添加一行代码,以再次单独确定点Transparent,然后从UnHide代码中进行调用。 (*)

  • 或者您可以完全停止使用IsEmpty属性,并通过将其“颜色”设置为“透明”来直接“隐藏”这些点。

(*)还要注意链接中的引号:您始终可以通过将(系列和)DataPoint Color属性设置为Color.Empty来切换回使用调色板颜色。(我的括号)

更新(*):我认为最好的着色方法是包括对IsEmpty属性的检查,如下所示:

if (p.IsEmpty)  p.Color = Color.Empty;
else ..