如何在图表上绘制灰色区域(允许的信号范围)?
我使用Winforms和标准的Microsoft System.Windows.Forms.DataVisualization
类
它应该是自定义范围,即起始Y点不能仅为零的含义
我在运行时,一个接一个地上网。
更新:
我尝试过StripLine - 没关系,但我不知道如何在2d中定义起点。它只能在X上设置或仅在Y上设置。我试图使用第二张图表(区域),但它不是我需要的......
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);
}
END OF UPDATE -------------------------------------------- -------------
非常感谢你!
答案 0 :(得分: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轴和y轴的实际值:
如果您知道值为int,则可以将它们转换为int
而不是我用于测试的float
。