Запретить ZedGraph рисовать недостающие точки - PullRequest
1 голос
/ 04 августа 2020

Когда GraphPane содержит только одну серию CurveItem rime, все работает нормально, каждая новая точка добавляется в диаграмму и отображается без пробелов или пропущенных значений.

Затем я добавляю второй временной ряд в тот же GraphPane и точки данных в этих временных рядах поступают с разной частотой, поэтому они имеют разные значения по оси X, тип данных по оси X установлен на DateAsOrdinal. В этот момент, когда я добавляю точки данных к каждому временному ряду, диаграмма, кажется, пытается синхронизировать точки данных в обоих временных рядах и заполнять разницу между точкой данных в первом временном ряду и точкой данных во втором с некоторыми средними промежуточными значениями.

Пример

var seriesA = new PointPairList();
var seriesB = new PointPairList();

var valuesA = new [] 
{
  new PointPair { DateTime.Parse("2006-01-01", 5) },
  new PointPair { DateTime.Parse("2006-01-02", 25) },
  new PointPair { DateTime.Parse("2006-01-03", 15) },
  new PointPair { DateTime.Parse("2006-01-04", 0) },
  new PointPair { DateTime.Parse("2006-01-05", 10) }
};

for (var i = 0; i < 5; i++) 
{
  control.GraphPane.seriesA.Add(valuesA[i]);
}

// Until now, everything works fine, now I try to add one point to the second seriesB 

control.GraphPane.seriesB.Add(new PointPair { DateTime.Parse("2006-02-05", 10) });

// At this moment, chart identifies that the average interval between dates is 1 day 
// and try to populate missing spaces between seriesA (2006-01-05) and seriesB (2006-02-05) 
// and automatically adds 30 more points to seriesA and 34 points to seriesB to make them equal

В конце я ожидаю, что seriesA будет иметь 5 баллов, а seriesB 1 балл, но ZedGraph пытается обеспечить равное количество точек данных , что равно 35.

Вопрос

Как убедиться, что я вижу на графике только те точки, которые добавил я сам?

Настройки диаграммы

control.AutoScroll = true;
control.IsEnableHPan = true;
control.IsEnableVPan = true;
control.IsEnableHZoom = false;
control.IsEnableVZoom = false;
control.IsShowHScrollBar = false;
control.IsShowVScrollBar = false;
control.IsAutoScrollRange = true;
control.IsShowPointValues = true;
control.IsSynchronizeXAxes = true;
control.IsEnableWheelZoom = false;
control.IsZoomOnMouseCenter = false;

Настройки панели

area.XAxis.Title.Text = string.Empty;
area.XAxis.Type = AxisType.DateAsOrdinal;
area.XAxis.Scale.Format = "dd-MM-yyyy HH:mm";
area.XAxis.MajorGrid.IsVisible = true;
area.XAxis.Scale.MinAuto = false;
area.XAxis.Scale.MaxAuto = false;

area.YAxis.Title.Text = string.Empty;
area.YAxis.MajorGrid.IsVisible = true;
area.YAxis.Scale.MinAuto = true;
area.YAxis.Scale.MaxAuto = true;

1 Ответ

1 голос
/ 05 августа 2020

Следующий код, как по мне, создает правильные графики с вашими данными.

результирующий график

        var area = control.GraphPane;
        area.Title.Text = string.Empty;
        area.XAxis.Type = AxisType.DateAsOrdinal;
        area.XAxis.MajorGrid.IsVisible = true;
        area.YAxis.MajorGrid.IsVisible = true;
        area.XAxis.Scale.Format = "dd-MM-yyyy";
        area.XAxis.Title.Text = string.Empty;
        area.YAxis.Title.Text = string.Empty;

        var seriesA = new PointPairList()
        {
            new PointPair(new XDate(DateTime.Parse("2006-01-01")), 5) ,
            new PointPair(new XDate(DateTime.Parse("2006-01-02")), 25) ,
            new PointPair(new XDate(DateTime.Parse("2006-01-03")), 15) ,
            new PointPair(new XDate(DateTime.Parse("2006-01-04")), 0) ,
            new PointPair(new XDate(DateTime.Parse("2006-01-05")), 10) ,
        };

        var seriesB = new PointPairList()
        {
            new PointPair(new XDate(DateTime.Parse("2006-02-05")), 10)
        };
     
        area.AddCurve("a", seriesA, Color.Red);
        area.AddCurve("b", seriesB, Color.Blue);
          
        control.AxisChange();
        control.Invalidate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...