在 MPAndroid 条形图中将 x 轴位置设置为 y = 0
Setting the x axis position to y = 0 in MPAndroid Bar Chart
我已经为此苦苦挣扎了一段时间,但我找不到让 x 轴及其标签位于 y = 0 位置的方法。当我同时拥有这两个轴时,这很重要正值和负值-我不想将轴设置为 AndroidMPChart (TOP, BOTTOM, BOTH_SIDED, TOP_INSIDE, BOTTOM_INSIDE) 给出的默认值,因为none 个适用。
我已经成功地编辑了 xAxisRenderer,并且已经能够传递我的 maxY 值与我的 minY 值的比率,希望能够手动找到设置轴的位置。然而,这个问题是我需要最高 Y 条和最低 Y 条的位置。我可以找到最低 Y 柱的位置没问题,使用 mViewPortHandler.contentBottom(),但使用
mViewPortHandler.contentTop() 出于某种原因没有给我 Y 栏的顶部。
List<Float> floatList = new ArrayList<>();
floatList.add(0f);
floatList.add(mViewPortHandler.contentTop());
floatList.add(mViewPortHandler.offsetTop()+mViewPortHandler.getScaleY());
floatList.add(mViewPortHandler.getContentCenter().y);
floatList.add(mViewPortHandler.contentBottom());
floatList.add(mViewPortHandler.getChartHeight());
if (mDebug) {
for (int i=0; i<floatList.size(); i++) {
Paint paint = new Paint();
paint.setColor(getRandomColorInColorFormPrintString("i = " + i));
paint.setStrokeWidth(3);
c.drawLine(mViewPortHandler.contentLeft()+15*i,
floatList.get(i), mViewPortHandler.contentRight()+15*i,
floatList.get(i), paint);
}
}
请注意 contentBottom(黄色)如何固定栏的底部,但 content top 和 offset top (pink/red) 在查找内容顶部时并不准确。我已经用许多不同的值尝试过这个,contentBottom 始终准确,而 contentTop/offsetTop 不是,也不会被值标签的高度偏移(我也已经尝试过了)。
我真正需要的是一种将 x 轴的位置设置在正值和负值之间的动态方法。我很惊讶 Android MP 图表没有这个选项。如果是这样,请让我知道我是否使事情过于复杂。
如果无法通过 Android MP 图表进行设置,如果您知道我在尝试获得 Y 条顶部时做错了什么,请告诉我。
我就是这样解决问题的--
在 renderAxisLine 函数中 =>
MPPointD pos = mTrans.getPixelForValues(0f, 0f);
c.drawLine(mViewPortHandler.contentLeft(),
(float)pos.y, mViewPortHandler.contentRight(),
(float)pos.y, mAxisLinePaint);
我已经为此苦苦挣扎了一段时间,但我找不到让 x 轴及其标签位于 y = 0 位置的方法。当我同时拥有这两个轴时,这很重要正值和负值-我不想将轴设置为 AndroidMPChart (TOP, BOTTOM, BOTH_SIDED, TOP_INSIDE, BOTTOM_INSIDE) 给出的默认值,因为none 个适用。
我已经成功地编辑了 xAxisRenderer,并且已经能够传递我的 maxY 值与我的 minY 值的比率,希望能够手动找到设置轴的位置。然而,这个问题是我需要最高 Y 条和最低 Y 条的位置。我可以找到最低 Y 柱的位置没问题,使用 mViewPortHandler.contentBottom(),但使用 mViewPortHandler.contentTop() 出于某种原因没有给我 Y 栏的顶部。
List<Float> floatList = new ArrayList<>();
floatList.add(0f);
floatList.add(mViewPortHandler.contentTop());
floatList.add(mViewPortHandler.offsetTop()+mViewPortHandler.getScaleY());
floatList.add(mViewPortHandler.getContentCenter().y);
floatList.add(mViewPortHandler.contentBottom());
floatList.add(mViewPortHandler.getChartHeight());
if (mDebug) {
for (int i=0; i<floatList.size(); i++) {
Paint paint = new Paint();
paint.setColor(getRandomColorInColorFormPrintString("i = " + i));
paint.setStrokeWidth(3);
c.drawLine(mViewPortHandler.contentLeft()+15*i,
floatList.get(i), mViewPortHandler.contentRight()+15*i,
floatList.get(i), paint);
}
}
请注意 contentBottom(黄色)如何固定栏的底部,但 content top 和 offset top (pink/red) 在查找内容顶部时并不准确。我已经用许多不同的值尝试过这个,contentBottom 始终准确,而 contentTop/offsetTop 不是,也不会被值标签的高度偏移(我也已经尝试过了)。
我真正需要的是一种将 x 轴的位置设置在正值和负值之间的动态方法。我很惊讶 Android MP 图表没有这个选项。如果是这样,请让我知道我是否使事情过于复杂。 如果无法通过 Android MP 图表进行设置,如果您知道我在尝试获得 Y 条顶部时做错了什么,请告诉我。
我就是这样解决问题的--
在 renderAxisLine 函数中 =>
MPPointD pos = mTrans.getPixelForValues(0f, 0f);
c.drawLine(mViewPortHandler.contentLeft(),
(float)pos.y, mViewPortHandler.contentRight(),
(float)pos.y, mAxisLinePaint);