Несколько рядов в линейной диаграмме в Winform с использованием C # - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в Winform Application.Я пытаюсь реализовать line chart с несколькими series и checkedListbox для выбора particular series.

Код:

if (tbROI.SelectedTab == tbROI.TabPages["tbPageROIPoint"])
            {
                //If all ROI TAB
                myIndex = GetMyChartIndex(mSeries, chartPointROI); // 4 for Point ROI tab

                m_PointDataCounter++;
                if (m_PointDataCounter > 15)
                {
                    if (myIndex > 5)
                    {
                        chartPointROI.Series[mSeries].Points.RemoveAt(0);
                        m_PointDataCounter--;
                    }
                }

                if (cbListPOI.GetItemChecked(ROIIndex))
                {
                    chartPointROI.Series[mSeries].Points.AddXY(timestring, mData);

                    chartPointROI.ResetAutoValues();
                }
            }

Используя этот код, я помещаю данные на chart control.X-axis представляет время и Y-axis представляет данные.

Сначала, когда я выбираю любой элемент из listbox, серия начинается с левой стороны, но через некоторое время, если я запускаю еще одну серию, она также начинается сслева, но я хочу начать это с текущего времени, которое представляет на оси X.

И когда я через какое-то время останавливаю любой series, если я снова запускаю тот же series, я хочу некоторый разрыв в серии, чтобы было ясно видно, что серия была остановлена.

В моем случае серия всегда начинается с левой стороны.И если я остановлю любую серию и начну ее снова, она продолжится там, где остановилась.

Заранее спасибо

РЕДАКТИРОВАТЬ:

enter image description here

Это показывает, что

1 Ответ

0 голосов
/ 19 сентября 2018

Вот пример того, как удалить несколько DataPoints, а также как их восстановить.

Обратите внимание на плоскую линию в зазоре.Если вы хотите «удалить» эту линию, лучше всего закрасьте последнюю точку прозрачной;Я добавил закомментированный код для этого.

List<DataPoint> marked = new List<DataPoint>();
int markedStartIndex = -1;

private void button1_Click(object sender, EventArgs e)
{
    // I create a testperiod to remove
    DateTime dt0 = DateTime.Now.AddMonths(2);
    DateTime dt1 = dt0.AddHours(123);
    DateTime dt2 = dt0.AddHours(173);

    // convert to doubles:
    double startPeriod = dt1.ToOADate();
    double endPeriod = dt2.ToOADate();

    // short reference
    Series s = chart1.Series[0];
    // select the points in the period. pick your border conditions!
    marked = s.Points.Cast<DataPoint>()
                     .Where(x => x.XValue > startPeriod && x.XValue < endPeriod)
                     .ToList();

    if (marked.Count < 1) return;

    // remember where we started to remove
    markedStartIndex = s.Points.IndexOf(marked.First()); 
    foreach (DataPoint dp in marked) s.Points.Remove(dp);

    // Optionally 'hide' the gap line
    //if (markedStartIndex > 0) s.Points[markedStartIndex].Color = Color.Transparent;
}

Код для возврата их вставляет их в нужное место, а затем очищает точки .:

private void button2_Click(object sender, EventArgs e)
{
    Series s = chart1.Series[0];
    // optionally re-color the gap-line 
    //if (markedStartIndex > 0) s.Points[markedStartIndex].Color = s.Color;

    foreach (DataPoint dp in marked) s.Points.Insert(markedStartIndex++, dp);
    marked.Clear();
}

Результат с прозрачным разрывом:

enter image description here

Вы также можете покрасить разрыв в красный, а также сохранить более одного набора точек;для этого вам нужно будет сохранить начальные точки, а также управлять несколькими периодами при их повторной вставке!

В качестве альтернативы фактическому удалению точек, вы также можете просто выбрать их прозрачные цвета..

...