Я использую MPAdroid для построения гистограммы с сгруппированными столбцами и надписями перед ними. Но результат, который я получаю, показан ниже
![enter image description here](https://i.stack.imgur.com/j0n9W.jpg)
Верхняя диаграмма - диаграмма1, а нижняя - диаграмма2. Теперь реальный порядок меток должен был быть TEMP-3, TEMP-1, BENTLER-1, BENTLER-2, ANNE-LOSE, ANNE-LOSE, BENTLER-1, BENTLER-2, ANNE-LOSE (снизу) , Но вы можете видеть, что заказ испорчен. С TEMP-3 (первая метка) повторяется без необходимости. А также, когда я печатаю список машин в моих журналах, он совпадает с желаемым результатом. Я разместил журналы внизу.
Вот как я настраиваю график.
BarChart chart = (BarChart) findViewById(R.id.chart2);
BarDataSet bds3 = new BarDataSet(percentage,"percentage");
BarData ddata = new BarData(bds3);
float barWidth = 0.45f;
ddata.setBarWidth(barWidth);
chart.setScaleEnabled(true);
chart.setPinchZoom(true);
chart.setData(ddata);
XAxis xa = chart.getXAxis();
String[] mac = new String[machines.size()];
for(int i=0;i<machines.size();++i)
{
mac[i] = machines.get(i);
Log.i("Message5432",mac[i]);
}
xa.setValueFormatter(new MyAxisValueFormatter(mac));
chart.fitScreen();
xa.setLabelCount(machines.size()+1,true);
xa.setCenterAxisLabels(true);
xa.setGranularity(1f);
xa.setGranularityEnabled(true);
chart.setTouchEnabled(true);
chart.setDragEnabled(true);
chart.setScaleEnabled(true);
chart.setVisibility(View.VISIBLE);
chart.invalidate();
BarDataSet bds2 = new BarDataSet(barEntries, "Target");
BarChart chart1 = (BarChart) findViewById(R.id.chart1);
BarDataSet bds1 = new BarDataSet(barEntries1,"Prepared");
bds1.setColor(Color.parseColor("#F44336"));
BarData ddata1 = new BarData(bds1,bds2);
chart1.setScaleEnabled(true);
chart1.setPinchZoom(true);
chart1.setData(ddata1);
XAxis xa1 = chart1.getXAxis();
xa1.setValueFormatter(new MyAxisValueFormatter(mac));
chart1.setTouchEnabled(true);
chart1.setDragEnabled(true);
chart1.setScaleEnabled(true);
float groupSpace = 0.08f;
float barSpace = 0.02f;
chart1.fitScreen();
ddata1.setBarWidth(barWidth);
xa1.setLabelCount(machines.size()+1,true);
chart1.groupBars( -0.5f,groupSpace, barSpace);
chart1.setFitBars(true);
chart1.setVisibility(View.VISIBLE);
xa1.setGranularity(1f);
xa1.setGranularityEnabled(true);
xa1.setCenterAxisLabels(true);
chart1.invalidate();
И я напечатал данные в машинах ArrayList, и я уверен, что данные в нем не являются ошибочными. Я не публикую код загрузки данных и не помещаю его в список массивов компьютеров.
Вот мой класс MyAxisValueFormatter.
public class MyAxisValueFormatter implements IAxisValueFormatter
{
String [] machines;
public MyAxisValueFormatter(String[] arr)
{
this.machines = arr;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
return machines[(int)value];
}
@Override
public int getDecimalDigits() {
return 0;
}
}
И это мой метод OnCreate (часть, относящаяся к графику)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_production_graphs);
barEntries.clear();
barEntries1.clear();
percentage.clear();
machines.clear();
dta.clear();
gblprpd.clear();
BarChart chart = (BarChart) findViewById(R.id.chart2);
chart.invalidate();
chart.setVisibility(View.GONE);
chart = (BarChart) findViewById(R.id.chart1);
chart.invalidate();
chart.setVisibility(View.GONE);
// This portion calls an Aysnc task for Downloading files.
try {
new ProductionGraphs.FTPDownloader().execute();
} catch (Exception e) {
e.printStackTrace();
}
}
Это мои журналы.
07-04 19:28:48.185 10169-10169/com.example.quickstart I/Message5432: TEMP-3
TEMP-1
BENTLER-1
BENTLER-2
ANNE-LOSE
TEMP-3
BENTLER-1
BENTLER-2
07-04 19:28:48.186 10169-10169/com.example.quickstart I/Message5432: ANNE-LOSE
Вот как устанавливаются значения бара
int data = in.read();
s = "";
int commas = 0;
int max = 0;
int xa = 0, xa1 = 0,xa2=0;
while (data != -1) {
char ch = (char) data;
if (ch != ',')
{
s = s + ch;
data = in.read();
continue;
}
else
{
++commas;
s = s + " ";
if (commas == 8) {
barEntries.add(new BarEntry(xa, Float.parseFloat(s)));
Log.i("FTP", s);
++xa;
}
if (commas == 6) {
barEntries1.add(new BarEntry(xa1, Float.parseFloat(s)));
Log.i("FTP", s);
++xa1;
}
if (commas == 4) {
machines.add(s);
Log.i("FTP", s);
}
gblprpd.add(s);
s = "";
}
data = in.read();
if (commas == 8) {
s = s + (char) data;
for (int i = 0; i < 5; ++i)
s = s + (char) in.read();
s = s + " ";
percentage.add(new BarEntry(xa2,Float.parseFloat(s)));
++xa2;
gblprpd.add(s);
s = "";
commas = 0;
data = in.read();
}
}
Это входные данные с сервера (значения разные, но формат тот же.)
![enter image description here](https://i.stack.imgur.com/s5Mid.png)
Я надеюсь, что дал вам достаточно информации для работы. Пожалуйста, не стесняйтесь просить больше. Заранее спасибо за ваше время.