TaW*_*TaW 6 c# charts winforms
我有这个Chart:
如何填充两者之间的区域Series S0 and S1,比如蓝色和黄色Series?
为此,我们编写了一个Paint事件:
这里的ValueToPixelPosition函数是有效的,并为我们提供DataPoint值和Chart像素之间的必要转换..:
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();
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不适用于缩放测试..
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |