【问题标题】:MPAndroidChart: LineChart fill does not stop at XAxisMPAndroidChart:LineChart 填充不会在 XAxis 处停止
【发布时间】:2015-01-31 03:26:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: android linechart mpandroidchart


    【解决方案1】:

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

    这个类允许你做的是创建你自己的逻辑来判断“填充线”应该在哪里结束。

    只需在您的自定义格式化程序类中实现FillFormatter 类并返回您希望填充线结束的值。

    例子:

    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());
    

    【讨论】:

    • 是的,这是一个更好的解决方案 - 谢谢!稍微不相关的问题 - 是否可以在 x 轴上方和下方分别自定义填充颜色?
    【解决方案2】:

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

    我之前有的是:

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

    为了防止这种情况发生,我把它改成了这样:

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

    它并不漂亮,但就我而言,它可以完成工作并且显示效果很好。限制线的默认值格式化程序无论如何都会将此值四舍五入为 0,所以它应该都很好。

    固定结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-20
      • 2019-04-29
      • 2012-07-15
      • 2011-05-22
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多