使用对数比例尺向图表添加空点

8

我正在使用 C#charts 来展示/比较一些数据。由于我的数据点差异很大,我将图表比例尺改为了 对数 比例尺,但是由于 对数 比例尺不支持 值,因此我想在这些情况下添加一个空点(或跳过一个数据点)。我尝试了以下方法,但都没有起作用,而且都会导致崩溃:

if (/*the point is zero*/)
{
    // myChart.Series["mySeries"].Points.AddY(null);
    // or
    // myChart.Series["mySeries"].Points.AddY();
    // or just skip the point
}

是否可以添加空点或跳过一个点?


如果它在循环中,你不能只是使用 continue 吗? - Lews Therin
这是一个循环,我可以继续执行,但这不会添加一个空点。我已经标记了我的X轴,所以如果我在下一个循环中继续循环,我将向我的X值添加一个错误的Y值。 - sj47sj
我也遇到了同样的问题 :( - Shady Mohamed Sherif
1
@shady sherif,你说的“_post it_”是什么意思?我已经做过了,在发表评论之前。然后我在这里发表评论,让你知道问题已经解决了。 - CSDev
谢谢,我没有看到答案。 - Shady Mohamed Sherif
显示剩余2条评论
2个回答

6
我找到了两种解决问题的方法。 其中一种是使用double.NaN(突然间!):
if (myChart.ChartAreas[0].AxisY.IsLogarithmic && y == 0)
    myChart.Series["mySeries"].Points.AddY(double.NaN);
    // or ...Points.Add(double.NaN)

这看起来像是零 enter image description here 而在我的情况下,它没有崩溃,并使用了以下的SeriesChartType:
Column, Doughnut, FastPoint, Funnel, Kagi, Pie, Point, Polar, Pyramid, Radar, Renko, Spline, SplineArea, StackedBar, StackedColumn, ThreeLineBreak

另一种方法是内置的空指针概念:
if (myChart.ChartAreas[0].AxisY.IsLogarithmic && y == 0)
    myChart.Series["mySeries"].Points.Add(new DataPoint { IsEmpty = true });

这看起来像是一个缺口: enter image description here 在我的情况下,它没有与以下的 "SeriesChartType" 崩溃:
Area, Bar, Column, Doughnut, FastPoint, Funnel, Line, Pie, Point, Polar, Pyramid, Radar, Renko, Spline, SplineArea, StackedArea, StackedArea100, StackedBar, StackedBar100, StackedColumn, StackedColumn100, StepLine, ThreeLineBreak

第二种方法看起来像是经过设计的正确方法。第一种方法看起来像是一个 hack,偶然间似乎起作用。

3

你可以使用一个技巧。首先需要清空你的点集。当你开始向一个空的点集添加点时,它们的 x 坐标会自动生成,从 1 开始递增。你可以自己创建代理的 x 值并跳过一些 x 坐标。

int x = 0;
foreach(var y in yValues)
{
    x++;
    if (myChart.ChartAreas[0].AxisY.IsLogarithmic && y == 0)
        continue;
    myChart.Series["mySeries"].Points.AddXY(x, y);
}

如果使用条形图类型,它会看起来像缺失的值。


我的点赞是给了一个好观点。但是如果图表类型是“折线”,那么您的方法会给出类似于“重复值”的东西,而不是空值。 - CSDev
1
@Alex 谢谢。我承认我的解决方案有弱点。但是任何一个解决方案都有弱点。由 OP 决定在情况下使用哪个解决方案以获得最佳结果。 - Eugee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接