MPAndroidChart icon indicating copy to clipboard operation
MPAndroidChart copied to clipboard

Bar Chart Data points showing but Bars not displaying

Open vishvendu opened this issue 8 years ago • 4 comments

img_20170307_130925 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);*/

}`

vishvendu avatar Mar 07 '17 07:03 vishvendu

@PhilJay need your help on this

vishvendu avatar Mar 07 '17 12:03 vishvendu

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 avatar Apr 25 '17 09:04 OumaSyuu

@OumaSyuu I had the same problem. However, I solved this problem followed your answer.

dorbae avatar Aug 09 '19 02:08 dorbae

Can it be fixed please ?:P

ovik88 avatar Aug 08 '22 16:08 ovik88