8

C# charts用来显示/比较一些数据。我将图形比例更改为logarithmic(因为我的数据点有很大差异),但由于logarithmic缩放不支持zero值,我只想为这种情况添加一个空点(或跳过一个数据点)。我尝试了以下但不起作用并且所有崩溃:

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

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

4

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)

这看起来像零 在此处输入图像描述

在我的情况下,它并没有因为以下SeriesChartTypes 而崩溃:

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 });

这看起来像是一个缺失点(一个差距): 在此处输入图像描述

在我的情况下,它并没有因为以下SeriesChartTypes 而崩溃:

Area, Bar, Column, Doughnut, FastPoint, Funnel, Line, Pie, Point, Polar, Pyramid, Radar, Renko, Spline, SplineArea, StackedArea, StackedArea100, StackedBar, StackedBar100, StackedColumn, StackedColumn100, StepLine, ThreeLineBreak

第二种方法感觉像是正确的(按设计)。第一个看起来像一个hack,它意外地似乎起作用了。

于 2019-07-19T17:57:06.777 回答
3

你可以做一个小把戏。你显然必须清除你的系列。当您开始向空点集合添加点时,会从 1 开始自动生成 x 坐标。您可以自己创建代理 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);
}

对于条形图类型,它看起来像是一个缺失值。

于 2019-08-04T15:36:34.857 回答