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());
我正在使用 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());