Bar Chart Data points showing but Bars not displaying
x-axis is time and y-axis is price...
This is how I am adding data into BarEntry
`JSONArray ChartDataPointArray = data.getJSONArray("ChartDataPoint"); System.out.println("ChartDataPointArray " + ChartDataPointArray.toString()); System.out.println("ChartDataPointArray length " + ChartDataPointArray.length()); long reference_timestamp = 0; if(ChartDataPointArray.length() > 0) reference_timestamp = Long.parseLong(ChartDataPointArray.getJSONObject(0).getString("ExecutionTime"));
IAxisValueFormatter xAxisFormatter = new HourAxisValueFormatter(reference_timestamp);
XAxis xAxis = _barChart.getXAxis();
xAxis.setValueFormatter(xAxisFormatter);
executionarraylist.clear();
for (int i = 0; i < ChartDataPointArray.length(); i++) {
JSONObject myJSON = ChartDataPointArray.getJSONObject(i);
_executionPricebarchart = myJSON.getString("ExecutionPrice");
_executionTimebarchart = myJSON.getString("ExecutionTime");
Long _executionTimebarchartLong = Long.parseLong(_executionTimebarchart);
executionarraylist.add(new BarEntry(_executionTimebarchartLong - reference_timestamp,Float.parseFloat(_executionPricebarchart)));
}setData();`
` BarDataSet set1; set1 = new BarDataSet(executionarraylist, "The year 2017");
// set1.setDrawIcons(false);
set1.setColors(ColorTemplate.MATERIAL_COLORS);
ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
dataSets.add(set1);
//dataSets.add(set2);
BarData bardata = new BarData(dataSets);
bardata.setValueTextSize(10f);
// data.setValueTypeface(mTfLight);
bardata.setBarWidth(1.9f);
_barChart.setData(bardata);
_barChart.getData().notifyDataChanged();
_barChart.notifyDataSetChanged();
_fillBars();`
`private void _fillBars() {
// IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(_barChart);
XAxis xAxis = _barChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
// xAxis.setTypeface(mTfLight);
xAxis.setDrawGridLines(false);
xAxis.setGranularity(0.1f); // only intervals of 1 day
xAxis.setLabelCount(7);
// xAxis.setValueFormatter(xAxisFormatter);
// IAxisValueFormatter custom = new MyAxisValueFormatter();
YAxis leftAxis = _barChart.getAxisLeft();
// leftAxis.setTypeface(mTfLight);
leftAxis.setLabelCount(8, false);
// leftAxis.setValueFormatter(custom);
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
leftAxis.setSpaceTop(15f);
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
YAxis rightAxis = _barChart.getAxisRight();
rightAxis.setDrawGridLines(false);
// rightAxis.setTypeface(mTfLight);
rightAxis.setLabelCount(8, false);
// rightAxis.setValueFormatter(custom);
rightAxis.setSpaceTop(15f);
rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
/*IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(_barChart);
XAxis xAxis = _barChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setGranularity(1f); // only intervals of 1 day
xAxis.setLabelCount(7);
xAxis.setValueFormatter(xAxisFormatter);
_barChart.getAxisRight().setAxisMinValue(0);
YAxis leftAxis = _barChart.getAxisLeft();
leftAxis.setLabelCount(8, true);
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
leftAxis.setSpaceTop(15f);*/
// leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
// setData(25, 5);
/*IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(referenceTimestamp);
XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(xAxisFormatter);*/
}`
@PhilJay need your help on this
I think because you are using millisecond as the unit of X axis, it draws the bars with 1 millisecond width. It is hard to see bars that thin. Convert timestamp to minutes (java.util.concurrent.TimeUnit.MINUTES) instead of using raw milliseconds.
@OumaSyuu I had the same problem. However, I solved this problem followed your answer.
Can it be fixed please ?:P