mpAndroidChart:Xaxis.setPosition到Bottom_Inside在Horizo​​ntalBarChart上不起作用

时间:2018-10-23 00:26:08

标签: mpandroidchart

我有一个带有mpAndroidChart的Horizo​​ntalBarChart,并且在显示左侧但在图形内时遇到问题。看起来像这样:

enter image description here

标签在左侧被切掉。通过行完成

testchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE)

在右侧,它工作流畅:

enter image description here

标签在图形内部并完整显示。这是通过以下行完成的:

testchart.getXAxis().setPosition(XAxis.XAxisPosition.TOP_INSIDE)

知道我在做什么错吗?

我的图表代码为:

BarData data = new BarData(new BarDataSet(entries, "Labeltest"));

        data.setBarWidth(1); // set custom bar width
        data.setDrawValues(false);
        oBinding.testchart.setData(data);
        oBinding.testchart.getXAxis().setLabelCount(labels.size());

        oBinding.testchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
        oBinding.testchart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(labels));

        // Hide grid lines
        oBinding.testchart.getAxisLeft().setEnabled(false);
        oBinding.testchart.getAxisRight().setEnabled(false);
        // Hide graph description
        oBinding.testchart.getDescription().setEnabled(false);
        // Hide graph legend
        oBinding.testchart.getLegend().setEnabled(false);


        oBinding.testchart.invalidate(); // refresh

和XML:

<com.github.mikephil.charting.charts.HorizontalBarChart
            android:id="@+id/testchart"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我用这种方法解决了。

if (this.state.testObject.hasOwnProperty(property_name))
  delete this.state.testObject.property_name
else {
  var testObject = this.state.testObject
  testObject[property_name] = some_value
  this.setState({testObject: testObject})
}

这样,标签应绘制在条形图上。您可以使用chart.getXAxis().setPosition(XAxisPosition.BOTTOM_INSIDE) 类的setXOffset(...)setYOffset(...)方法来重新放置标签。

如果您有更好的方法,请告诉我,谢谢

答案 1 :(得分:0)

试试这个:

XAxis xAxis = chart.getXAxis();  
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);

为回应@andreas-zuercher 的评论而添加:

这种方式一直对我有用。这也使设置其他轴参数变得容易,例如:

    xAxis.setDrawGridLines(true);
    xAxis.setGranularity(1f);
    xAxis.setGranularityEnabled(true);
    final String[] xTime = time.split(",");
    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return xTime[(int) value-1];
        }

    });
    xAxis.setValueFormatter(new IndexAxisValueFormatter(xTime));