我正在使用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”,它们将显示在图表上。如果我不恢复默认颜色,则点将保持隐藏,就像它们应该那样:
上面的红点不应该在那里。如果我“隐藏”原始点,它们往往会显示在删除点附近。它们实际上消失了,但立即像魔术一样靠近或高于它们。如果隐藏了12个中的最后一个“ IsEmpty”,则所有12个都会在60秒标记后显示。 x和y值都是正确的,但应将其隐藏。 OTOH如果我还没有“恢复默认颜色”,那么当我取消隐藏它们时,它们将保持隐藏状态,并且图表的行为就像我想要的那样。
答案 0 :(得分:0)
这肯定看起来像MSChart中的错误。
但是,如果您正确看待它,则可能背后有一定逻辑。
这似乎是发生了什么:图表显示的empty DataPoints
并不带有其实际y值,而是位于它们之前的最后一个非空点之一。
结果看起来很愚蠢,因此在您的情况下,它可以作为错误。 Otoh,您使用IsEmpty
属性的方式不是是 meant 的意思:它是将数据的某些部分标记为“丢失”;因此,假设这些点始终没有有效的y值。但是对于许多图表类型,这可能会导致奇怪的结果,因此它会保留最后一个有效值。
一个经典的例子是带有每日数据但在周末没有有意义数据的图表。如果遗漏了丢失的数据,某些事情将无法工作,因此将插入空的虚拟点。 (实际上甚至有一个功能可以做到这一点。)
(请注意,这只是我的解释,不是文档功能!)
这不会导致您看到有趣的显示,因为您已经将EmptyPointStyle.Color
设置为Transparent
。但是:现在,您可以更改所有点的颜色,并且此会覆盖系列样式和颜色中的颜色:有趣的显示..
解决方案:
您可以在Rescale
函数中添加一行代码,以再次单独确定点Transparent
,然后从UnHide
代码中进行调用。 (*)
或者您可以完全停止使用IsEmpty
属性,并通过将其“颜色”设置为“透明”来直接“隐藏”这些点。
(*)还要注意链接中的引号:您始终可以通过将(系列和)DataPoint Color属性设置为Color.Empty来切换回使用调色板颜色。(我的括号)
更新(*):我认为最好的着色方法是包括对IsEmpty
属性的检查,如下所示:
if (p.IsEmpty) p.Color = Color.Empty;
else ..