mpandroidchart-无法获取x轴标签以正确显示

时间:2019-01-16 13:29:00

标签: android charts kotlin mpandroidchart

我试图使用LineChart显示数据,并遇到显示x轴标签的问题。我使用data.startdata.end来设置图表中的x轴范围。因此,假设API仅返回两天(星期四和星期五)的数据,start将是星期一,end将是星期六。

注意:X值是所有unix时间戳。

这是我的代码:

class MyChart(chart: LineChart?, val data: MyData) {
      private val startValue = data.start.toEpochSecond(ZoneOffset.UTC)                             
      init {
           chart?.run {
               setScaleEnabled(false)
               legend.isEnabled = false
               description.isEnabled = false

                axisRight.run {
                      setDrawGridLines(true)
                      setDrawLabels(false)
                      axisMinimum = 0.1f // hide 0.0 values
                }
                axisLeft.run {
                      setDrawGridLines(true)
                      axisMinimum = 0.1f // hide 0.0 values
                }

                setupXAxis(xAxis)

                Log.e("MPTEST, startValue: ", startValue.toString())

                val entries = ArrayList<Entry>()
                data.list?.forEachIndexed { _, data ->
                    val timeInSeconds = data.time.toEpochSecond(ZoneOffset.UTC)
                    val xIndex = (timeInSeconds - startValue).toFloat()
                    Log.e("MPTEST, xIndex: ", xIndex.toString())

                    entries.add(Entry(xIndex, data.value))
                 }

                 val data = LineData(LineDataSet(entries, ""))
                 setData(data)

                 invalidate()
}}

private fun setupXAxis(xAxis: XAxis?) {
    xAxis?.run {
        position = XAxis.XAxisPosition.BOTTOM

        val startInSeconds = data.start.toEpochSecond(ZoneOffset.UTC)
        axisMinimum = (startInSeconds - startValue).toFloat()
        Log.e("MPTEST, axisMinimum: ", axisMinimum.toString())

        val endInSeconds = data.end.toEpochSecond(ZoneOffset.UTC)
        axisMaximum = (endInSeconds - startValue).toFloat()
        Log.e("MPTEST, axisMaximum: ", axisMaximum.toString())

        setCenterAxisLabels(true)
        setDrawGridLines(false)

        // I need to fix something here I think
        setLabelCount(7, true)
        valueFormatter = IndexAxisValueFormatter(data.labels)
    }
} }

这是logcat的输出:

E/MPTEST, axisMinimum:: 0.0
E/MPTEST, axisMaximum:: 604799.0
E/MPTEST, startValue:: 1546732800 
E/MPTEST, xIndex:: 366180.0
E/MPTEST, xIndex:: 467893.0  

这就是我得到的-https://i.ibb.co/YD2DnhJ/Screen-Shot-2019-01-16-at-7-20-23-AM.png
(如您所见,仅显示第一个x轴标签)

这就是我想要达到的目标-https://i.ibb.co/M8b9pyP/Screen-Shot-2019-01-16-at-7-24-15-AM.png

0 个答案:

没有答案