2016-12-21 3 views
1

Как я могу нарисовать серовую область на диаграмме (допустимый диапазон сигнала)?
Я использую классы Winforms и стандартные классы Microsoft System.Windows.Forms.DataVisualization.
Это должен быть настраиваемый диапазон, означающий, что начальная точка Y может быть не только нулевой.
Точки, которые я получаю онлайн, во время выполнения, один за другим.Winforms Chart - нарисовать разрешенную область на линейной диаграмме

UPDATE:

Я попытался полосковой - это нормально, но я не знаю, как определить начальную точку в 2d. Его можно установить только на X или только на Y. Я попытался использовать второй график (Area), но это не то, что мне нужно ...

UPDATE2:
Благодаря @Reza Aghaei !!!

Вот код, который отлично работает:

void drawAllowedArea(Point startPoint, Point endPoint, PaintEventArgs e) 
{ 
     var l = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(startPoint.X); 
     var t = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(endPoint.Y); 
     var r = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(endPoint.X); 
     var b = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(startPoint.Y); 
     var rect = RectangleF.FromLTRB(l, t, r, b); 
     using (var br = new SolidBrush(Color.FromArgb(100, Color.Blue))) 
     { 
      e.Graphics.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); 
     } 
     e.Graphics.DrawRectangle(Pens.Red, rect.X, rect.Y, rect.Width, rect.Height); 
} 

//and use this function in chart1_Paint event: 
void chart1_Paint(object sender, PaintEventArgs e) 
{ 
     drawAllowedArea(new Point(20, 50000), new Point(40, 100000), e); 
} 

КОНЕЦ UPDATE ----------------------------- ----------------------------

enter image description here

Спасибо большое!

+0

Я пробовал StripLine - это нормально, но я не знаю, как определить начальную точку в 2d. Его можно установить только на X или только на Y. Я попытался использовать второй график (Area), но это не то, что мне нужно ... Кроме того, (я добавлю его на вопрос) он должен быть видимым во время выполнения - я получаю очки онлайн, один за другим. –

+0

[Stripline] (http://stackoverflow.com/questions/38958646/winforms-chart-how-to-enable-background-color-gauge/38959173?s=6|0.1465#38959173) также будет работать так же, как и Rectangleannotation , Но рисунок часто достаточно хорош. – TaW

ответ

4

Вы можете обработать Paint событие Chart управление и нарисовать на нем прямоугольник. Чтобы получить координаты прямоугольника на основе значений оси x и оси y, вы можете использовать метод оси ValueToPixelPosition. Например:

void chart1_Paint(object sender, PaintEventArgs e) 
{ 
    var l = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(3.7); 
    var t = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(45); 
    var r = (float)chart1.ChartAreas[0].AxisX.ValueToPixelPosition(7.2); 
    var b = (float)chart1.ChartAreas[0].AxisY.ValueToPixelPosition(31); 
    var rect = RectangleF.FromLTRB(l, t, r, b); 
    using (var br = new SolidBrush(Color.FromArgb(100,Color.Blue))) 
     e.Graphics.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); 
    e.Graphics.DrawRectangle(Pens.Red, rect.X, rect.Y, rect.Width, rect.Height); 
} 

Вышеуказанные значения являются просто случайные значения для теста, вы должны использовать фактические значения вашей оси х и оси у:

  • л: слева от прямоугольника (от x- ось)
  • т: верхняя часть прямоугольника (от оси у)
  • г: справа от прямоугольника (от оси х)
  • B: нижняя части прямоугольника (от оси у)

Если вы знаете значения int, вы можете их отличить от int вместо float, который я использовал для тестирования.

+0

Спасибо большое !!!! Оно работает!!! –

+0

Добро пожаловать :) –

Смежные вопросы