Я ожидаю, что вам потребуется создать пользовательский lineSegmentRenderer для диаграммы серии линий. Текущий lineSegmentRenderer является ShadowLineRenderer. Не решая саму всю проблему, я создал бы новый класс на основе ShadowLineRenderer и изменил метод updateDisplayList, чтобы нарисовать линию точно так, как вам нужно. Затем измените свойство lineSegmentRenderer вашей серии строк, чтобы использовать этот рендерер.
Если это поможет, мне пришлось сделать очень похожую вещь, но с AreaRenderer. Градиент области должен был быть основан на итоговой диаграмме, а не окрашивать полный градиент для любой отображаемой области (например, с помощью обычного AreaRenderer, если область только покрывает первые 20% оси y, она все еще использовала полный градиент, который был нежелательной особенностью для моего проекта). Вот решение моей проблемы, где я создал свой собственный AreaRenderer и обновил метод updateDisplayList:
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var fill:IFill = GraphicsUtilities.fillFromStyle(getStyle("areaFill"));
var stroke:IStroke = getStyle("areaStroke");
var form:String = getStyle("form");
var g:Graphics = graphics;
g.clear();
if (!_area)
return;
var boundary:Array /* of Object */ = _area.filteredCache;
var n:int = boundary.length;
if (n <= 1)
return;
var xMin:Number;
var xMax:Number = xMin = boundary[0].x;
var yMin:Number;
var yMax:Number = yMin = boundary[0].y;
var i:int;
var v:Object;
for (i = 0; i < n; i++)
{
v = boundary[i];
xMin = Math.min(xMin, v.x);
yMin = Math.min(yMin, v.y);
xMax = Math.max(xMax, v.x);
yMax = Math.max(yMax, v.y);
if (!isNaN(v.min))
{
yMin = Math.min(yMin, v.min);
yMax = Math.max(yMax, v.min);
}
}
if (fill)
fill.begin(g, new Rectangle(0, 0, unscaledWidth, unscaledHeight));
GraphicsUtilities.drawPolyLine(g, boundary, 0, n,
"x", "y", stroke, form);
g.lineStyle(0,0,0);
if(boundary[0].element.minField != null && boundary[0].element.minField != "")
{
g.lineTo(boundary[n - 1].x, boundary[n - 1].min);
GraphicsUtilities.drawPolyLine(g, boundary, n - 1, -1,
"x", "min", noStroke, form, false);
}
else
{
g.lineTo(boundary[n - 1].x, _area.renderedBase);
g.lineTo(boundary[0].x, _area.renderedBase);
}
g.lineStyle(0, 0, 0);
g.lineTo(boundary[0].x, boundary[0].y);
g.endFill();
}