我怎么能填两个系列的样条曲线或线条之间的区域(S) [英] How can I fill the area(s) between two Series of Splines or Lines
本文介绍了我怎么能填两个系列的样条曲线或线条之间的区域(S)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样的图
:
我如何能填补之间的区域两个系列S0和S1
,说,蓝色和黄色系列
?
How can I fill the area between two Series S0 and S1
, say the blue and the yellow Series
?
推荐答案
要做到这一点,我们的代码的画一张
事件:
To do that we code one of the Paint
events:
下面的的 ValueToPixelPosition
功能是有效的,为我们提供了数据点
值之间的必要的转换图
像素..:
Here the ValueToPixelPosition
functions are valid and provide us with the necessary conversion between the DataPoint
values and Chart
pixels..:
private void chart1_Paint(object sender, PaintEventArgs e)
{
// we assume two series variables are set..:
if (sps1 == null || sps2 == null) return;
// short references:
Axis ax = chart1.ChartAreas[0].AxisX;
Axis ay = chart1.ChartAreas[0].AxisY;
// now we convert all values to pixels
List<PointF> points1 = sps1.Points.Select(x=>
new PointF((float)ax.ValueToPixelPosition(x.XValue),
(float)ay.ValueToPixelPosition(x.YValues[0]))).ToList();
List<PointF> points2 = sps2.Points.Select(x=>
new PointF((float)ax.ValueToPixelPosition(x.XValue),
(float)ay.ValueToPixelPosition(x.YValues[0]))).ToList();
// one list forward, the other backward:
points2.Reverse();
GraphicsPath gp = new GraphicsPath();
gp.FillMode = FillMode.Winding; // the right fillmode
// it will work fine with either Splines or Lines:
if (sps1.ChartType == SeriesChartType.Spline ) gp.AddCurve(points1.ToArray());
else gp.AddLines(points1.ToArray());
if (sps2.ChartType == SeriesChartType.Spline) gp.AddCurve(points2.ToArray());
else gp.AddLines(points2.ToArray());
// pick your own color, maybe a mix of the Series colors..
using (SolidBrush brush = new SolidBrush(Color.FromArgb(66, Color.DarkCyan)))
e.Graphics.FillPath(brush, gp);
gp.Dispose();
}
请注意,这不是缩放测试。
Note that this is not tested for zooming..
这篇关于我怎么能填两个系列的样条曲线或线条之间的区域(S)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文