Как я могу заполнить область (ы) между двумя сериями сплайнов или линий двумя разными цветами? - PullRequest
1 голос
/ 10 ноября 2019

У меня есть такая диаграмма: оригинал

Я хочу заполнить область сплайна над горизонтальной серией зеленым и под горизонтальной серией красным, как эта краска: нарисовано

Я попробовал код из здесь , но это поможет мне заполнить только одним цветом: / as PaintEvent Я использую:

private void dgv_Paint(object sender, PaintEventArgs e){

// short references:
Axis ax = dgv.ChartAreas[0].AxisX;
Axis ay = dgv.ChartAreas[0].AxisY;

// now we convert all values to pixels
List<PointF> points1 =  dgv.Series[0].Points.Select(x=>
    new PointF((float)ax.ValueToPixelPosition(x.XValue), 
               (float)ay.ValueToPixelPosition(x.YValues[0]))).ToList();

List<PointF> points2 =  dgv.Series[1].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 (dgv.Series[0].ChartType == SeriesChartType.Spline )   gp.AddCurve(points1.ToArray());
else gp.AddLines(points1.ToArray());
if (dgv.Series[1].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();}    

Может быть, у кого-то есть подходящая подсказка для меня ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...