Winforms Chart - 在折线图上绘制一个允许的区域
Winforms Chart - draw a allowed area on line chart
如何绘制图表上的灰色区域(信号的允许范围)?
我使用 Winforms 和标准 Microsoft System.Windows.Forms.DataVisualization
类.
应该是自定义范围,意思是起始Y点只能不为零。
我上线的积分,在运行时间,一一
更新:
我尝试了 StripLine - 没问题,但我不知道如何在 2d 中定义起点。它可以仅在 X 上或仅在 Y 上设置。我尝试使用第二个图表(区域),但这不是我需要的...
更新 2:
感谢@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);
}
更新结束---------------------------------------- --------------
非常感谢!
您可以处理 Chart
控件的 Paint
事件并在其上绘制一个矩形。要根据 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轴的实际值:
- l: 矩形左侧(从 x 轴)
- t:矩形顶部(从 y 轴)
- r: 矩形右侧(从 x 轴)
- b: 矩形底部(从 y 轴)
如果您知道值是整数,您可以将它们转换为 int
而不是我用于测试的 float
。
如何绘制图表上的灰色区域(信号的允许范围)?
我使用 Winforms 和标准 Microsoft System.Windows.Forms.DataVisualization
类.
应该是自定义范围,意思是起始Y点只能不为零。
我上线的积分,在运行时间,一一
更新:
我尝试了 StripLine - 没问题,但我不知道如何在 2d 中定义起点。它可以仅在 X 上或仅在 Y 上设置。我尝试使用第二个图表(区域),但这不是我需要的...
更新 2:
感谢@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);
}
更新结束---------------------------------------- --------------
非常感谢!
您可以处理 Chart
控件的 Paint
事件并在其上绘制一个矩形。要根据 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轴的实际值:
- l: 矩形左侧(从 x 轴)
- t:矩形顶部(从 y 轴)
- r: 矩形右侧(从 x 轴)
- b: 矩形底部(从 y 轴)
如果您知道值是整数,您可以将它们转换为 int
而不是我用于测试的 float
。