YChart Android - я не могу отображать точки на графике так, как они должныAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 YChart Android - я не могу отображать точки на графике так, как они должны

Сообщение Anonymous »

Мне нужно создать линейный график, где каждая точка представляет собой приобретенный продукт и где ось X представляет часы дня (от 0 до 24), а y представляет стоимость этого продукта. Для каждого добавляемого объекта я перехожу к Recompose the Composable, но даже несмотря на то, что я создаю точку с правильными координатами, точки не показываются там, где они должны быть.

Код: Выделить всё

 @Composable
fun StaticLineChart(pointsData: List
) {
if(pointsData.isNotEmpty()) {
SingleLineChartWithGridLines(pointsData)
} else {
Box(
modifier = Modifier
.fillMaxWidth()
.height(300.dp),
contentAlignment = Alignment.Center
) {
Text(
text = "No orders today",
style = MaterialTheme.typography.bodyMedium,
color = Color.Gray
)
}
}
}

@Composable
private fun SingleLineChartWithGridLines(pointsData: List) {
val steps = 8
val xMax= 24f
val yMin= 0f
val yMax = pointsData.maxOfOrNull { it.y }?.takeIf { it > 300f } ?: 300f

pointsData.forEach { point ->
println("Rendering Point: x=${point.x}, y=${point.y}")
}

// Impostare l'asse X con etichette per 24 ore in modo che siano visibili da 0 a 24
val xAxisData = AxisData.Builder()
.axisStepSize(30.dp)
.topPadding(105.dp)
.steps(steps) // 24 ore
.labelData { i -> ((i * (xMax / steps))).toInt().toString() } // Mostra etichette ogni 3 ore: 0, 3, 6, ..., 24
.labelAndAxisLinePadding(15.dp)
.build()

// Impostare l'asse Y con un minimo fisso di 0 e massimo di almeno 300
val yAxisData = AxisData.Builder()
.steps(steps)
.labelAndAxisLinePadding(20.dp)
.labelData { i ->
val yScale = (yMax - yMin) / steps
((i * yScale) + yMin).formatToSinglePrecision()
}
.build()

val data = LineChartData(
linePlotData = LinePlotData(
lines = listOf(
Line(
dataPoints = pointsData,
lineStyle = LineStyle(width = 2f),
intersectionPoint = IntersectionPoint(radius = 3.dp),
selectionHighlightPoint = SelectionHighlightPoint(radius = 1.dp),
shadowUnderLine = ShadowUnderLine(),
selectionHighlightPopUp = SelectionHighlightPopUp()
)
)
),
xAxisData = xAxisData,
yAxisData = yAxisData,
)

LineChart(
modifier = Modifier
.fillMaxWidth()
.height(300.dp),
lineChartData = data
)
}
Пример точки на графике
Может ли мне помочь кто-нибудь с опытом в этом вопросе?

Подробнее здесь: https://stackoverflow.com/questions/785 ... hey-should
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»