Comments (4)
Hello! Thanks for the report. Vico 2.0.0 Alpha 1 resolved this issue, and we’ll be fixing it in Vico 1 too.
from vico.
Vico 1.14.0 Alpha 3 addresses this.
from vico.
How to reproduce
Use ComposedChartEntryModelProducer and create two charts. Add entries with the xStep = 1 to the 1st chart. Add entries with the xStep = 3 to the 2nd chart (xStep should be greater than xStep on any of previous charts)
@Preview @Composable fun SamplePreview() { val columnEntries = listOf( FloatEntry(y = 5f, x = 0f), FloatEntry(y = 6f, x = 1f), FloatEntry(y = 9f, x = 2f), FloatEntry(y = 2f, x = 3f), ) val lineEntries = listOf( FloatEntry(y = 4f, x = 0f), FloatEntry(y = 7f, x = 3f), ) val columnChart = columnChart( columns = currentChartStyle.columnChart.columns, ) val lineChart = lineChart( lines = currentChartStyle.lineChart.lines, ) ProvideChartStyle { Chart( modifier = Modifier.fillMaxSize(), chart = remember(columnChart, lineChart) { columnChart + lineChart }, chartModelProducer = ComposedChartEntryModelProducer.build { add(columnEntries) add(lineEntries) }, startAxis = rememberStartAxis(guideline = null), bottomAxis = rememberBottomAxis(guideline = null), ) } }
Observed behavior
App crashes:
java.lang.IllegalStateException: Each entry’s x value must be a multiple of the x step. at com.patrykandpatrick.vico.core.chart.column.ColumnChart.drawChartInternal(ColumnChart.kt:161) at com.patrykandpatrick.vico.core.chart.column.ColumnChart.drawChart(ColumnChart.kt:127) at com.patrykandpatrick.vico.core.chart.BaseChart.drawChartInternal(BaseChart.kt:134) at com.patrykandpatrick.vico.core.chart.BaseChart.drawScrollableContent(BaseChart.kt:92) at com.patrykandpatrick.vico.core.chart.BaseChart.drawScrollableContent(BaseChart.kt:37) at com.patrykandpatrick.vico.core.chart.composed.ComposedChart.drawChart(ComposedChart.kt:90) at com.patrykandpatrick.vico.core.chart.composed.ComposedChart.drawChartInternal(ComposedChart.kt:98) at com.patrykandpatrick.vico.core.chart.composed.ComposedChart.drawChartInternal(ComposedChart.kt:45) at com.patrykandpatrick.vico.core.chart.BaseChart.drawScrollableContent(BaseChart.kt:92) at com.patrykandpatrick.vico.core.chart.BaseChart.drawScrollableContent(BaseChart.kt:37) at com.patrykandpatrick.vico.compose.chart.ChartsKt$ChartImpl$4.invoke(Charts.kt:380) at com.patrykandpatrick.vico.compose.chart.ChartsKt$ChartImpl$4.invoke(Charts.kt:307) at androidx.compose.ui.draw.DrawBackgroundModifier.draw(DrawModifier.kt:116) at androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-x_KDEd0$ui_release(LayoutNodeDrawScope.kt:105) at androidx.compose.ui.node.LayoutNodeDrawScope.draw-x_KDEd0$ui_release(LayoutNodeDrawScope.kt:86) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:365) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922) at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:182) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:54) at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:384) at androidx.compose.ui.node.NodeCoordinator$invoke$1.invoke(NodeCoordinator.kt:383) at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2299) at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:467) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230) androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133) at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:383) at androidx.compose.ui.node.NodeCoordinator.invoke(NodeCoordinator.kt:54) at androidx.compose.ui.platform.RenderNodeApi29.record(RenderNodeApi29.android.kt:209) at androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(RenderNodeLayer.android.kt:305) at androidx.compose.ui.platform.RenderNodeLayer.drawLayer(RenderNodeLayer.android.kt:246) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:349) at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922) at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:174) at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:362) at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:354) at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:922) at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1133) at android.view.View.draw(View.java:24193) at android.view.View.updateDisplayListIfDirty(View.java:23056) at android.view.View.draw(View.java:23920) at android.view.ViewGroup.drawChild(ViewGroup.java:4566) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4327) at android.view.View.updateDisplayListIfDirty(View.java:23047) at android.view.View.draw(View.java:23920) at android.view.ViewGroup.drawChild(ViewGroup.java:4566) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4327) at android.view.View.updateDisplayListIfDirty(View.java:23047) at android.view.View.draw(View.java:23920) at android.view.ViewGroup.drawChild(ViewGroup.java:4566) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4327) at android.view.View.updateDisplayListIfDirty(View.java:23047) at android.view.View.draw(View.java:23920) at android.view.ViewGroup.drawChild(ViewGroup.java:4566) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4327) at android.view.View.draw(View.java:24193) at com.android.internal.policy.DecorView.draw(DecorView.java:827) at android.view.View.updateDisplayListIfDirty(View.java:23056) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:694) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:700) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:798) at android.view.ViewRootImpl.draw(ViewRootImpl.java:5234) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4900) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4049) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2659) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9789) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1399) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1408) at android.view.Choreographer.doCallbacks(Choreographer.java:1008) at android.view.Choreographer.doFrame(Choreographer.java:938) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1382) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
Expected behavior
The composed chart is drawn with
xStep
equal to the minimalxStep
of its children charts.Vico version(s)
Latest stable version
Android version(s)
api 34
Additional information
As a workaround we're now setting
xStep
to 1f viagetXStep
lambda (parameter ofChart(...)
) instead of letting the library do the calculation.
from vico.
Vico 1.14.0 is rolling out. Cheers!
from vico.
Related Issues (20)
- Marker missing style defined by custom MarkerLabelFormatter HOT 9
- Cannot access CartesianChartHost in my project HOT 2
- Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied HOT 6
- Cannot make a LabelFormatter on stacked column chart HOT 11
- Markers only works for the first line series HOT 2
- Crash on changing dataset which contains negative values HOT 3
- Throwing OOM Exception when using Chart in LazyColumn HOT 7
- Marker duplicated HOT 2
- No axisValueOverrider in rememberCandlestickCartesianLayer HOT 4
- Feature Missing - Slide to Position HOT 4
- Text alignment on y-axis label only shown correctly for ALIGN_NORMAL HOT 6
- [View] CartesianChartView always handles touches, even if `isClickable` or `isEnabled` is false HOT 6
- Cannot Round NaN to Float HOT 4
- Crash inside AnimatedVisibility() HOT 4
- ColumnChart with MergeMode.Grouped does not receive callback for all the series added through CartesianMarkerVisibilityListener HOT 2
- TopBottomShader.splitY doesn't do anything HOT 1
- Incorrect floating point rounding in xSpacingMultiplier calculation leads to wrong IllegalStateException HOT 6
- At the end the label of bottom axis is cut off HOT 5
- Couple crashes with `java.util.ConcurrentModificationException` and `java.util.NoSuchElementException: Key null is missing in the map` HOT 8
- Bottom label truncated sometimes HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vico.