Составьте несколько графиков в одном в MPAndroidChart
Я должен построить два разных набора данных в одном графике.
DataSet-1
String[] xAxisOne = new String[] {
"0", "1", "2", "3", "4", "5", "6"
};
float[] dataInput = {
1f, 2f, 3f, 4f, 5f, 6f, 7f
};
DataSet-2
String[] xAxisTwo = new String[] {
"0", "2", "4", "5", "6", "8", "9"
};
float[] dataIn = {
3f, 4f, 5f, 6f, 7f, 8f, 9f
};
В приведенных выше данных DataSet-1 является ссылкой, по которой создается график. DataSet-2 должен быть представлен одинаково с другим набором значений X {xAxisTwo}.
В существующей реализации первые 6 значений {dataInput} построены, а следующие 6 значений {dataIn} построены со ссылкой на xAxisOne
Как построить при необходимости.
3 ответа
Вы можете сделать это с помощью LineChart, объединяя xAxis и игнорируя нулевую точку для каждого набора данных. Смотрите код ниже:
//float[] dataInput = {
// 1f, 2f, 3f, 4f, 5f, 6f, 7f
//};
//values for datainput Dataset1 at your axisone positions
ArrayList<Entry> dataset1 = new ArrayList<Entry>();
dataset1.add(new Entry(1f, 0));
dataset1.add(new Entry(2f, 1));
dataset1.add(new Entry(3f, 2));
dataset1.add(new Entry(4f, 3));
dataset1.add(new Entry(5f, 4));
dataset1.add(new Entry(6f, 5));
dataset1.add(new Entry(7f, 6));
//float[] dataIn = {
// 3f, 4f, 5f, 6f, 7f, 8f, 9f
//};
//values for datainput Dataset2 at your axisone positions
ArrayList<Entry> dataset2 = new ArrayList<Entry>();
dataset2.add(new Entry(3f, 0));
dataset2.add(new Entry(4f, 2));
dataset2.add(new Entry(5f, 4));
dataset2.add(new Entry(6f, 5));
dataset2.add(new Entry(7f, 6));
dataset2.add(new Entry(8f, 7));
dataset2.add(new Entry(9f, 8));
//String[] xAxisOne = new String[] {
// "0", "1", "2", "3", "4", "5", "6"
//};
///String[] xAxisTwo = new String[] {
/// "0", "2", "4", "5", "6", "8", "9"
///};
// Union from xAxisOne and xAxisTwo
String[] xAxis = new String[] {"0", "1", "2", "3", "4", "5", "6", "8", "9"};
ArrayList<LineDataSet> lines = new ArrayList<LineDataSet> ();
LineDataSet lDataSet1 = new LineDataSet(dataset1, "DataSet1");
lDataSet1.setColor(Color.RED);
lDataSet1.setCircleColor(Color.RED);
lines.add(lDataSet1);
lines.add(new LineDataSet(dataset2, "DataSet2"));
LineChart chart = (LineChart) getView().findViewById(R.id.chart);
chart.setData(new LineData(xAxis, lines));
Окончательный результат будет:
Похоже, что красная линия набора данных1 имеет на 2 точки больше, чем синяя. Если набор данных1 имеет только эти две точки (в позициях 1 и 3), как это:
ArrayList<Entry> dataset1 = new ArrayList<Entry>();
dataset1.add(new Entry(2f, 1));
dataset1.add(new Entry(4f, 3));
это будет результат:
Ну, для этого потребуется обновление с версии 3:
Для нескольких строк вам понадобится несколько наборов данных. Предположим, вы создали два набора данных.
LineDataSet dataSetReported = new LineDataSet(entriesReported, "Reported");
LineDataSet dataSetCalculated = new LineDataSet(entriesCalculated, "Calculated");
Вам понадобится список ILINEDATASET для размещения обоих созданных наборов данных. Просто создайте список и добавьте наборы данных.
List<ILineDataSet> lines = new ArrayList<ILineDataSet>();
lines.add(dataSetReported);
lines.add(dataSetCalculated);
Отобразите его на графике как:
LineData data = new LineData(lines);
chart.setData(data);
chart.invalidate();
Здесь можно найти документацию от оригинального автора.
Вы можете использовать эту линейную диаграмму, передавая несколько наборов данных
LineChart lineChart1 = (LineChart) findViewById(R.id.chart1);
ArrayList<Entry> entries = new ArrayList<>();
entries.add(new Entry(4f, 0));
entries.add(new Entry(8f, 1));
entries.add(new Entry(6f, 2));
entries.add(new Entry(10f, 3));
entries.add(new Entry(18f, 4));
entries.add(new Entry(9f, 5));
ArrayList<Entry> entry = new ArrayList<>();
entry.add(new Entry(3f, 0));
entry.add(new Entry(10f, 1));
entry.add(new Entry(4f, 2));
entry.add(new Entry(14f, 3));
entry.add(new Entry(12f, 4));
entry.add(new Entry(5f, 5));
ArrayList<LineDataSet> lines = new ArrayList<LineDataSet> ();
String[] xAxis = new String[] {"1", "2", "3", "4", "5","6"};
LineDataSet lDataSet1 = new LineDataSet(entries, "DataSet1");
lDataSet1.setDrawFilled(true);
lines.add(lDataSet1);
LineDataSet lDataSet2 = new LineDataSet(entry, "DataSet2");
lDataSet2.setDrawFilled(true);
lines.add(lDataSet2);
lineChart1.setData(new LineData(xAxis, lines));
lineChart1.animateY(5000);
}