tl; dr Установите минимальные и максимальные значения оси X на кратные интервалы, которые вы хотите (например, кратные 5), и установите гранулярность оси на соответствующее кратное значение этого же интервала (например, 5).
Полный пример Вот пример программы тестирования, показывающей, как установить границы оси и гранулярность, чтобы маркеры были кратны некоторому вашему выбору.Опция гранулярности устанавливает минимальное разрешение для оси, а установка xMin и xMax на кратное значение означает, что расстояние между осями будет кратным вашему выбору.Обратите внимание, что, например, если вы выберете 5-минутный интервал, вы можете получить тики осей с интервалом в 10 минут (или 15 или 20), чтобы сохранить соответствующее количество линий осей.
РЕДАКТИРОВАТЬ: OP спросил о реальномграфик времени, поэтому я обновил пример для построения волны синуса в реальном времени.
package com.project.testchart;
import android.graphics.Color;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private final Handler handler = new Handler();
private ArrayList<Entry> data = new ArrayList<>();
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacksAndMessages(null);
}
@Override
protected void onResume() {
super.onResume();
handler.postDelayed(new Runnable() {
@Override
public void run() {
addPointToChart();
drawChart();
handler.postDelayed(this, 250);
}
}, 250);
}
private void addPointToChart() {
while( data.size() > 100 ) {
data.remove(0);
}
lastX += 1f;
float y = (float)Math.sin(lastX/5f);
data.add(new Entry(lastX,y));
}
private void drawChart() {
float textSize = 20f;
LineDataSet line = new LineDataSet(data, "Sin");
line.setLineWidth(5);
line.setColor(Color.BLACK);
line.setDrawValues(false);
line.setDrawCircles(false);
line.setHighLightColor(Color.TRANSPARENT);
LineData lines = new LineData();
lines.addDataSet(line);
LineChart chart = findViewById(R.id.test_chart);
chart.setData(lines);
Description desc = new Description();
desc.setText("");
chart.setDescription(desc);
chart.setDrawBorders(true);
YAxis yAxisR = chart.getAxisRight();
yAxisR.setDrawGridLines(false);
yAxisR.setEnabled(false);
YAxis yAxisL = chart.getAxisLeft();
yAxisL.setDrawGridLines(true);
yAxisL.setDrawTopYLabelEntry(true);
yAxisL.setTextSize(textSize);
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextSize(textSize);
float xMin = (float)Math.floor((line.getXMin()-xInterval)/xInterval)*xInterval;
float xMax = (float)Math.ceil((line.getXMax()+xInterval)/xInterval)*xInterval;
float xSpan = xMax - xMin;
float xi = xSpan / 6; // approximately 6 labels
float xGran = Math.max(xInterval,(float)Math.round(xi/xInterval)*xInterval);
xAxis.setGranularity(xGran);
xAxis.setAxisMinimum(xMin);
xAxis.setAxisMaximum(xMax);
Legend l = chart.getLegend();
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setTextSize(textSize);
chart.setExtraBottomOffset(10f);
chart.setExtraRightOffset(20f);
chart.invalidate();
}
private float xInterval = 5f;
private float lastX = 0f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
float xStart = 3f;
float xEnd = 7f;
for(int i = 0; i < 4; ++i) {
float x = xStart + (i/3f)*(xEnd-xStart);
float y = (float)Math.sin(x/5f);
data.add(new Entry(x,y));
}
lastX = xEnd;
drawChart();
}
}
И файл XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/test_chart"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="32dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
Некоторые снимки экрана для различных диапазонов данных