выделить набор данных автоматически - PullRequest
0 голосов
/ 28 мая 2020

У меня есть гистограмма, которая была создана с использованием приведенного ниже кода:

val myStackLabels = arrayOfNulls<String>(endMonth)
val values = java.util.ArrayList<BarEntry>()
for (i in activityList.indices){
    myStackLabels[i] = HelperFunctions.getMonthName(activityList.get(i).actionMonth,2)
    values.add(
        BarEntry(
            i.toFloat(), activityList.get(i).totalBehaviorPoints.toFloat()
        )
    )
}

val dataSet = BarDataSet(values, "")

val colors = java.util.ArrayList<Int>()
colors.add(Color.parseColor("#C5C4C4"))

dataSet.colors = colors
dataSet.setDrawIcons(true)
dataSet.highLightColor = Color.parseColor("#3f51b5")

val xAxis: XAxis = myChart!!.getXAxis()
xAxis.setDrawGridLines(false)
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM)
xAxis.setValueFormatter(IndexAxisValueFormatter(myStackLabels))
xAxis.setGranularity(1f)
xAxis.setGranularityEnabled(true)
xAxis.setDrawAxisLine(false)
xAxis.textColor = Color.BLACK
xAxis.labelCount = endMonth
xAxis.setDrawLabels(true)

val leftAxis: YAxis = myChart!!.getAxisLeft()
leftAxis.setDrawGridLines(true)
leftAxis.setLabelCount(endMonth, true)
leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART)
leftAxis.spaceTop = 15f
leftAxis.axisMinimum = 0f // this replaces setStartAtZero(true)
leftAxis.setDrawAxisLine(true)

val rightAxis: YAxis = myChart!!.getAxisRight()
rightAxis.setDrawGridLines(false)
rightAxis.setLabelCount(endMonth, false)
rightAxis.spaceTop = 15f
rightAxis.axisMinimum = 0f // this replaces setStartAtZero(true)
rightAxis.setDrawAxisLine(false)
rightAxis.isEnabled = false

val dataSets = java.util.ArrayList<IBarDataSet>()
dataSets.add(dataSet)

val data = BarData(dataSets)
data.setValueFormatter(StackedValueFormatter(false, " points", 0));
data.setValueTextColor(Color.BLACK);
data.setDrawValues(true)

val myHighlight = Highlight(1f, 0,0);
myChart.highlightValue(myHighlight)
myChart.animateY(1500)
myChart.setDrawValueAboveBar(true)
myChart.setScaleEnabled(false)
myChart.setPinchZoom(false)
myChart.setData(data);
myChart.setFitBars(true); // make the x-axis fit exactly all bars
myChart.invalidate(); // refresh

В основном приведенный выше код будет генерировать очень базовую гистограмму c. Я хочу автоматически выделить одну из полосовых линий, скажем, 2-ю полосу, следовательно, приведенный выше код myHighlight = Highlight(1f, 0,0).

Но запуск программы всегда будет возвращать java.lang.NullPointerException: Attempt to invoke virtual method 'com.github.mikephil.charting.data.Entry com.github.mikephil.charting.data.ChartData.getEntryForHighlight(com.github.mikephil.charting.highlight.Highlight)' on a null object reference at com.github.mikephil.charting.charts.Chart.highlightValue(Chart.java:631), который указывает на строку myChart.highlightValue(myHighlight)

...