折线图中X轴标签不显示(MpAndroidChart)

3
我有一个简单的折线图,其中X轴的值对应一年中的月份。问题是它没有显示相应的标签。我使用IAxisFormatter将月份数字替换为文本(1 = Jan,2 = Feb等)。

This is how it looks now

但是,我想让它看起来像这样。

enter image description here

我放置了我如何配置折线图的代码(Kotlin)

    // GENERAL CONFIGURATION
    lineChartEvolucionFragment.setPinchZoom(false)
    lineChartEvolucionFragment.setTouchEnabled(false)
    lineChartEvolucionFragment.description = null
    lineChartEvolucionFragment.legend.isEnabled = false
    lineChartEvolucionFragment.axisRight.isEnabled = false
    lineChartEvolucionFragment.xAxis.position = XAxis.XAxisPosition.BOTTOM
    lineChartEvolucionFragment.xAxis.setDrawGridLines(false)
    lineChartEvolucionFragment.xAxis.valueFormatter = MonthFormatter()
    lineChartEvolucionFragment.isDragEnabled = true
    lineChartEvolucionFragment.axisLeft.setDrawGridLines(false)
    lineChartEvolucionFragment.xAxis.setCenterAxisLabels(true)
    lineChartEvolucionFragment.xAxis.labelRotationAngle = 315f
    lineChartEvolucionFragment.xAxis.setDrawLabels(true)

    // DATASET
    val entries = mutableListOf<Entry>()

        for (historia in getHistoryDummy()) {
            val month = Funciones.formatTimestamp("MM",  historia.fechaEnviado).toIntOrNull()
                    ?: continue
            entries.add(Entry(month.toFloat(), getDatoByType(historia)))

            Log.d(TAG, "Mes: ${month.toFloat()}")
        }

        val dataset = LineDataSet(entries, "Evolución")
        dataset.lineWidth = 2f
        dataset.color = ContextCompat.getColor(context!!, R.color.colorAccent)
        dataset.setCircleColor(ContextCompat.getColor(context!!, R.color.colorPrimaryDark))
        val lineData = LineData(dataset)
        lineData.setValueFormatter(ValueFormatter())
        lineData.setValueTextSize(12f)
        lineChartEvolucionFragment.data = lineData

        lineChartEvolucionFragment.axisLeft.addLimitLine(getLimitByType())
        lineChartEvolucionFragment.setVisibleXRange(1f, 5f)

        lineChartEvolucionFragment.animateX(500, Easing.EasingOption.EaseInSine)

    //FORMATTER

    class MonthFormatter : IAxisValueFormatter {

    override fun getFormattedValue(value: Float, axis: AxisBase?): String =       when  (value) {
    1f -> "Jan"
    2f -> "Feb"
    3f -> "Mar"
    4f -> "Apr"
    5f -> "May"
    6f -> "Jun"
    7f -> "Jul"
    8f -> "Aug"
    9f -> "Sept"
    10f -> "Oct"
    11f -> "Nov"
    12f -> "Dec"
    else -> ""
       }

    }

我正在使用版本3.0.3


请发布您的布局XML代码。如果可能,请提供缺失的Kotlin代码。 - Pravin Divraniya
你能公开完整的代码吗? - Cuong Nguyen
2个回答

1

设置标签计数器以显示所需月份,并检查是否解决了您的问题。

lineChartEvolucionFragment.xAxis.lableCount = 12

1
以下代码应该可以正常工作:
var xAxis = lineChartEvolucionFragment.xAxis
xAxis.position = XAxis.XAxisPosition.BOTTOM
xAxis.setDrawGridLines(false)
xAxis.setDrawLabels(true)

var xLabels = lineChartEvolucionFragment.xLabels
xLabels.setPosition(XLabelPosition.BOTTOM)

xAxis.valueFormatter = MonthFormatter()

我猜测float value的值为1时会返回1.0f,而你正在检查的是1f。因此,请编辑您的值格式化程序:
class MonthFormatter : IAxisValueFormatter {
override fun getFormattedValue(value: Float, axis: AxisBase?): String =       
    when (Math.round(value)) {
        1 -> "Jan"
        2 -> "Feb"
        3 -> "Mar"
        4 -> "Apr"
        5 -> "May"
        6 -> "Jun"
        7 -> "Jul"
        8 -> "Aug"
        9 -> "Sept"
        10 -> "Oct"
        11 -> "Nov"
        12 -> "Dec"
        else -> ""
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接