0

this is my first question in SO:

I'm using Androidplot 0.6.0 in an Android app. I'm displaying a bar chart of six months (a bar per month), at this point everything is well, the trouble is the bar's width (very thin), I would like make the bars wider for better appearance. I have tried the following:

XYSeries series1 = new SimpleXYSeries(Arrays.asList(domain), Arrays.asList(range), "Title");
BarFormatter series1Format = new BarFormatter(Color.argb(255,0,0,100), Color.LTGRAY);
plot.addSeries(series1, series1Format);

//plot.addSeries(series1, BarRenderer.class, series1Format); //Not in version 0.6.0 
//BarRenderer barRenderer = (BarRenderer) plot.getRenderer(BarRenderer.class); //This return null
BarRenderer barRenderer = new BarRenderer(plot);
if(barRenderer != null) {
   barRenderer.setBarWidthStyle(BarRenderer.BarWidthStyle.FIXED_WIDTH);
   barRenderer.setBarWidth(100); //This don't take effect
}

The result always is the same for whatever value in setBarWidth().

Thanks in advance.

Manuel Lopera
  • 2,268
  • 1
  • 16
  • 16

3 Answers3

2

Try this

 BarRenderer renderer = (BarRenderer) plot.getRenderer(BarRenderer.class);
    renderer.setBarWidth(20);

Update

Try this, make ur formatter and renderer.

class MyBarFormatter extends BarFormatter {
        public MyBarFormatter(int fillColor, int borderColor) {
            super(fillColor, borderColor);
        }

        @Override
        public Class<? extends SeriesRenderer> getRendererClass() {
            return MyBarRenderer.class;
        }

        @Override
        public SeriesRenderer getRendererInstance(XYPlot plot) {
            return new MyBarRenderer(plot);
        }
    }

    class MyBarRenderer extends BarRenderer<MyBarFormatter> {

        public MyBarRenderer(XYPlot plot) {
            super(plot);
        }

        protected MyBarFormatter getFormatter(int index, XYSeries series) {
            return getFormatter(series);
        }
    }

Now

MyBarRenderer renderer = ((MyBarRenderer) plot.getRenderer(MyBarRenderer.class));
    renderer.setBarWidthStyle(BarRenderer.BarWidthStyle.FIXED_WIDTH);
    renderer.setBarWidth(20);
keshav
  • 3,235
  • 1
  • 16
  • 22
  • Thanks for answer, but this don't work for me... As you can see in the original question, I tried this, but (BarRenderer) plot.getRenderer(BarRenderer.class); return a null value. Maybe, is it necessary set some BarRenderer for plot object before call this statement? – Manuel Lopera Feb 15 '14 at 13:53
  • @ManuelLopera see changes – keshav Feb 16 '14 at 08:57
  • Thanks @keshav, this works fine! Only add before MyBarRenderer instance: MyBarFormatter series1Format = new MyBarFormatter(Color.argb(255,0,0,100), Color.LTGRAY); plot.addSeries(series1, series1Format); MyBarRenderer renderer = ... – Manuel Lopera Feb 17 '14 at 13:28
0

In addition to keshav's answer, if you just want to close the gap between the bars, you could use:

// get the renderer
MyBarRenderer renderer = ((MyBarRenderer) plot.getRenderer(MyBarRenderer.class));

// can only set the bar gap if bar width style is VARIABLE_WIDTH
renderer.setBarWidthStyle(BarRenderer.BarWidthStyle.VARIABLE_WIDTH);

// mind the gap
renderer.setBarGap(0f);
BrockLee
  • 931
  • 2
  • 9
  • 24
  • You could just call the setters in the constructor of your own renderer to avoid casting and for better encapsulation. – Kalle Oct 28 '14 at 16:52
0

to close the gap I use this code:

BarRenderer renderer = barPlot.getRenderer(BarRenderer.class);
renderer.setBarGroupWidth(BarRenderer.BarGroupWidthMode.FIXED_GAP,1);
B Porr
  • 305
  • 2
  • 11