При обновлении диаграммы столбцов динамически генерируется исключение UnsupportedOperationException - PullRequest
1 голос
/ 17 марта 2020

У нас есть кольцевая диаграмма, и при щелчке фрагмента на кольцевой диаграмме мы хотели бы обновить значения в ColumnChart.

Вот так мы устанавливаем слушателя для кольцевой диаграммы

segments.forEach(Consumer { segment: PieSegment ->
        segment.addIsSelectedChangeListener {

            drawColumnChart(clickedSliceProperties)

        }
    })

Метод, который dr aws ColumnChart

private fun drawColumnChart(values: Array<Int>) {
    val xAxis: IAxis = sciChartBuilder.newNumericAxis().withGrowBy(0.15, 0.15).withLabelProvider(YearsLabelProvider()).build()
    val yAxis: IAxis = sciChartBuilder.newNumericAxis().withGrowBy(0.0, 0.0).build()

    xAxis.autoRange = AutoRange.Always
    yAxis.autoRange = AutoRange.Always

    val dataSeries: IXyDataSeries<Int, Int> = sciChartBuilder.newXyDataSeries(Int::class.javaObjectType, Int::class.javaObjectType).build()


    for (i in values.indices) {
        dataSeries.append(i, values[i])
    }

    val rSeries = sciChartBuilder.newColumnSeries()
            .withStrokeStyle(-0xdcdcdd, 0.4f)
            .withDataPointWidth(0.5)
            .withDataSeries(dataSeries)
            .withPaletteProvider(ColumnsPaletteProvider())
            .build()

    UpdateSuspender.using(lineChart) {
        lineChart.theme = R.style.SciChart_Bright_Spark
        Collections.addAll(lineChart.xAxes, xAxis)
        Collections.addAll(lineChart.yAxes, yAxis)
        Collections.addAll(lineChart.renderableSeries, rSeries)
        Collections.addAll(lineChart.chartModifiers, sciChartBuilder.newModifierGroupWithDefaultModifiers().build())
        sciChartBuilder.newAnimator(rSeries).withWaveTransformation().withInterpolator(DecelerateInterpolator()).withDuration(3000).withStartDelay(350).start()
    }
}

Попытка передать другой набор значения для метода drawColumnChart (), это исключение выдается.

java .lang.UnsupportedOperationException: AxisCollection.getAxisById ('DefaultAxisId') вернул более одной оси с идентификатором = DefaultAxisId. Убедитесь, что вы присвоили правильные идентификаторы осей, если у вас есть несколько осей в SciChart

Спасибо за ваше время:)

1 Ответ

2 голосов
/ 18 марта 2020

Это исключение выдается, потому что каждая ось в коллекции xAxes / yAxes должна иметь уникальный идентификатор. Также вы должны иметь в виду, что в случае нескольких осей вам также необходимо назначить правильный идентификатор оси для визуализируемой серии. Пожалуйста, посмотрите на учебник SciChart, как добавить несколько осей в диаграмму. .

Так что в вашем случае код для создания осей должен выглядеть следующим образом:

val xAxis: IAxis = sciChartBuilder.newNumericAxis().withAxisId(uniqueXAxisId).withGrowBy(0.15, 0.15).withLabelProvider(YearsLabelProvider()).build()
val yAxis: IAxis = sciChartBuilder.newNumericAxis().withAxisId(uniqueYAxisId).withGrowBy(0.0, 0.0).build()

и код для создания воспроизводимых рядов, например:

val rSeries = sciChartBuilder.newColumnSeries()
        .withXAxisId(uniqueXAxisId)
        .withYAxisId(uniqueYAxisId)
        .withStrokeStyle(-0xdcdcdd, 0.4f)
        .withDataPointWidth(0.5)
        .withDataSeries(dataSeries)
        .withPaletteProvider(ColumnsPaletteProvider())
        .build()

Однако, если вы хотите обновить значения столбцов, не добавляя новые серии, просто создайте и установите xAxis, yAxis и визуализируемые серии один раз внешний слушатель, храните ряды данных в приватном поле и в слушателе обновляйте ряды данных новыми данными вместо того, чтобы каждый раз воссоздавать их:

dataSeries.clear()
for (i in values.indices) {
    dataSeries.append(i, values[i])
}
...