如何在单个XY绘图中合并两个信号?(基于WPF代码实现)
将两个WPF XY信号合并到同一个绘图的解决方案
要把两个信号放到同一个XY绘图里,咱们需要做几个关键修改——统一绘图容器、合并坐标范围,还要给两个信号设置区分样式,具体步骤如下:
1. 简化XAML布局,只保留一个Canvas
原来你用了两个Grid和两个Canvas分开绘制信号,现在只需要一个Canvas即可,删掉多余的容器:
<Grid Grid.Row="0" Grid.Column="0"> <Canvas x:Name="gCanvasPlot" Width="500" Height="150" ... /> </Grid>
2. 计算全局坐标范围(核心!)
原来每个信号都用自己的X/Y极值转换坐标,直接画在一起会导致坐标系不统一,两个信号可能错位或显示不全。所以咱们要先合并两个信号的参数,算出整个绘图的全局极值:
// 提取两个信号的原始范围参数 var params0 = glistdParams0; var params1 = glistdParams1; double xMin0 = params0[1], xMax0 = params0[2]; double yMin0 = params0[3], yMax0 = params0[4]; double xMin1 = params1[1], xMax1 = params1[2]; double yMin1 = params1[3], yMax1 = params1[4]; // 计算全局范围:取两个信号里最小的X、最大的X,最小的Y、最大的Y double globalXmin = Math.Min(xMin0, xMin1); double globalXmax = Math.Max(xMax0, xMax1); double globalYmin = Math.Min(yMin0, yMin1); double globalYmax = Math.Max(yMax0, yMax1);
3. 调整Plot方法适配全局范围
原来的Plot方法依赖每个信号自己的参数,咱们可以修改它直接接收全局范围参数,这样更灵活:
private void Plot(Canvas canvas, Polyline poXY, double dXmin, double dXmax, double dYmin, double dYmax, List<Point> listPoints) { double dPlotWidth = dXmax - dXmin; double dPlotHeight = dYmax - dYmin; // 清空Polyline原有点,避免重复绘制 poXY.Points.Clear(); foreach (var originalPoint in listPoints) { var pointResult = new Point { X = (originalPoint.X - dXmin) * canvas.Width / dPlotWidth, Y = canvas.Height - (originalPoint.Y - dYmin) * canvas.Height / dPlotHeight }; poXY.Points.Add(pointResult); } // 确保Polyline只被添加一次 if (!canvas.Children.Contains(poXY)) { canvas.Children.Add(poXY); } }
4. 设置信号样式并调用绘图
给两个Polyline设置不同的颜色/粗细,这样能直观区分两个信号,然后用同一个Canvas和全局范围绘制:
// 给第一个信号设置蓝色粗线 gpoXY0.Stroke = Brushes.Blue; gpoXY0.StrokeThickness = 2; // 给第二个信号设置红色粗线 gpoXY1.Stroke = Brushes.Red; gpoXY1.StrokeThickness = 2; // 调用Plot方法,传入同一个Canvas和全局范围 Plot(gCanvasPlot, gpoXY0, globalXmin, globalXmax, globalYmin, globalYmax, glistPoints0); Plot(gCanvasPlot, gpoXY1, globalXmin, globalXmax, globalYmin, globalYmax, glistPoints1);
额外说明
如果你的两个信号本来就有完全相同的X/Y范围,可以跳过全局范围计算的步骤,直接用其中一个信号的参数即可,但保留全局范围逻辑能让代码更通用,适配不同范围的信号。
内容的提问来源于stack exchange,提问作者ttom
相关产品推荐
相关产品推荐

