3

While generating Bar Graph using JFreeChart, I am getting billions and Millions value in scientific numeric format, that is having less readability,

enter image description here

There is any way, so that I can get the value like using JfreeChart.

enter image description here

It has to be dynamic for Million, Billions for all value. Any help will be appreciated.

SaviNuclear
  • 886
  • 1
  • 7
  • 19

3 Answers3

5

Thanks to @Haroldo_OK and @trashgod for you hint and finally I got the solution for the same and It's giving me the expected result.

final long MILLION = 1000000L;
    final long BILLION = 1000000000L;
    final long TRILLION = 1000000000000L;
    final long THOUSAND = 1000L;

    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setNumberFormatOverride(new NumberFormat() {

        @Override
        public Number parse(String source, ParsePosition parsePosition) {
            return null;
        }

        @Override
        public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos) {

            String temp =  number < THOUSAND ? String.valueOf(number) :
                number < MILLION ?  (int)(number / THOUSAND) + " K" :
                number < BILLION ?  (int)(number / MILLION) + " M" :
                number < TRILLION ? (int)(number / BILLION) + " B" : 
                (int)(number / TRILLION) + " T";
            return new StringBuffer(temp);
        }

        @Override
        public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) {

            String temp =  number < THOUSAND ? String.valueOf(number) :
                number < MILLION ?  (int)(number / THOUSAND) + " K" :
                number < BILLION ?  (int)(number / MILLION) + " M" :
                number < TRILLION ? (int)(number / BILLION) + " B" : 
                (int)(number / TRILLION) + " T";
            return new StringBuffer(temp);
        }
    });
SaviNuclear
  • 886
  • 1
  • 7
  • 19
2

Use invoke setNumberFormatOverride() on your plot's NumberAxis, as shown here. You'll need a custom NumberFormat, possibly using one of the approach shown here or here.

Community
  • 1
  • 1
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
1

Maybe you could create your own custom TickUnits, as this other post suggests.

Community
  • 1
  • 1
Haroldo_OK
  • 6,612
  • 3
  • 43
  • 80