Я создаю горизонтальную столбчатую диаграмму с помощью MPAndroidChart (v3.1.0). Я использую Android Studio, а в моем проекте используются API уровня 17 и Kotlin. Отлично работает, и в настоящее время я получаю следующий результат:
Значения правильно начинаются с 0 (зеленые полосы) и заканчиваются на 20 для самая большая полоса (красная часть). Теперь я хочу избавиться от левого поля (пространство перед зелеными полосами), и я хочу установить нижние метки на интервал 1.
Это мой код:
class MainActivity : AppCompatActivity() {
private lateinit var chart : HorizontalBarChart
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
chart = findViewById(R.id.chart1)
setData()
}
private fun setData(){
val barWidth = 9f
val values1: ArrayList<BarEntry> = ArrayList()
values1.add(BarEntry(0F, floatArrayOf(3f, 3f, 2f)))
values1.add(BarEntry(10F, floatArrayOf(6f, 3f, 2f)))
values1.add(BarEntry(20F, floatArrayOf(9f, 3f, 2f)))
values1.add(BarEntry(30F, floatArrayOf(12f, 3f, 2f)))
values1.add(BarEntry(40F, floatArrayOf(15f, 3f, 2f)))
val set1: BarDataSet
if (chart.data != null && chart.data.dataSetCount > 0) {
set1 = chart.data.getDataSetByIndex(0) as BarDataSet
set1.values = values1
chart.data.notifyDataChanged()
chart.notifyDataSetChanged()
} else {
set1 = BarDataSet(values1, "DataSet 1")
set1.setDrawIcons(false)
set1.colors = getColors()
val dataSets: ArrayList<IBarDataSet> = ArrayList()
dataSets.add(set1)
val data = BarData(dataSets)
data.setValueTextSize(10f)
data.barWidth = barWidth
chart.data = data
}
chart.xAxis.setDrawLabels(false)
chart.xAxis.setDrawGridLines(false)
chart.axisLeft.setDrawLabels(false)
chart.axisLeft.setDrawGridLines(false)
chart.axisRight.granularity = 1f
chart.axisRight.isGranularityEnabled = true
chart.axisRight.setCenterAxisLabels(false)
chart.description.isEnabled = false
chart.setFitBars(true)
}
private fun getColors(): List<Int> {
// have as many colors as stack-values per entry
val colors = IntArray(3)
System.arraycopy(ColorTemplate.MATERIAL_COLORS, 0, colors, 0, 3)
return colors.toMutableList()
}
}
Я не мог понять, как избавиться от левого поля. Для интервала меток я добавил эту строку:
chart.axisRight.labelCount = 20
И вот результат:
Вдруг я не получается 20 меток, как я настроил в коде, но я получаю 25 меток, и мои метки начинаются с -2. Зачем? Когда я пытаюсь установить минимальное значение на 0F, становится еще хуже, и мои полосы больше не выровнены правильно по сравнению с линиями сетки меток.
Также попытался установить setVisibleYRangeMaximum (20F, YAxis.AxisDependency.RIGHT) и setViewPortOffsets (0F, 0F, 0F, 0F), но ни один из них не дает желаемого результата и только ухудшит его.
Как я могу настроить диаграмму так, чтобы она начиналась с нуля, без левого поля и заканчиваются на 20, все метки отображаются с интервалом 1, и все полосы выровнены правильно по сравнению с метками?