MPAndroidChart:LineChart 填充不会在 XAxis 处停止

MPAndroidChart: LineChart fill does not stop at XAxis

我正在使用 MPAndroidChart。当我使用LineChart setDrawFilled()方法填充直线和x轴之间的space,并手动调整范围大于默认值时,填充的部分会超过x轴如此屏幕截图所示:

蓝色填充应停在 x 轴上方的绿色虚线处,但它会延伸到 x 轴上方并进入正 y 值。

*经过进一步调查,我发现似乎只有当绿线设置为 0 时才会发生。

好的,我刚刚想出了一个简单的解决方法。问题似乎在于限制线与 x-axis 重叠 - 所以您所要做的就是防止 0 y-value 发生。

我之前的是:

LimitLine line= new LimitLine((float) foo);

为了防止这种情况发生,我将其更改为如下内容:

if(foo == 0)
    foo = 0.00000001f;
LimitLine line= new LimitLine((float) foo);

它不是很漂亮,但在我的例子中它完成了工作并且显示效果很好。无论如何,限制线的默认值格式化程序将该值四舍五入为 0,因此 应该 一切正常。

固定结果:

另一种选择是使用库提供的 FillFormatter 接口:https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartLib/src/com/github/mikephil/charting/utils/FillFormatter.java

这个 class 允许您做的是在 "filling-line" 应该结束的地方创建您自己的逻辑。

只需在您的自定义格式化程序中实现 FillFormatter class class 和 return 您希望填充行结束的值。

示例:

class MyCustomFillFormatter implements FillFormatter {

    // return the fill position
    public float getFillLinePosition(LineDataSet dataSet, LineData data, float chartMaxY, float chartMinY) {
        return 0f;
    }
}

getFillLinePosition(...) 方法中,您当然可以根据各种影响因素制定自己的线条位置逻辑。

创建格式化程序后,将其设置为 LineChart:

lineChart.setFillFormatter(new MyCustomFillFormatter());