【问题标题】:Updating Column chart dynamically throws UnsupportedOperationException动态更新柱形图抛出 UnsupportedOperationException
【发布时间】:2020-03-17 17:46:24
【问题描述】:

我们有一个圆环图,当在圆环图上单击一个切片时,我们希望更新 ColumnChart 中的值。

这就是我们为圆环图设置监听器的方式

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

            drawColumnChart(clickedSliceProperties)

        }
    })

绘制柱状图的方法

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') 返回了多个 ID=DefaultAxisId 的轴。当您在 SciChart 中有多个轴时,请检查您是否分配了正确的轴 ID

感谢您的宝贵时间 :)

【问题讨论】:

    标签: android scichart


    【解决方案1】:

    这个异常被抛出,因为 xAxes/yAxes 集合中的每个轴都应该有唯一的 id。此外,您应该记住,在多个轴的情况下,您还需要为可渲染系列分配正确的轴 ID。请关注SciChart tutorial that how to add multiple axes into the chart.

    因此,在您的情况下,创建轴的代码应如下所示:

    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])
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2021-04-18
      • 1970-01-01
      • 2022-01-22
      • 2014-01-30
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多