Question

I'm tryng to add some padding in my graph by setting up min and max values to X and Y axis.

my XYMultipleSeriesRenderer code is below:

        // custom render
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();

    // background
    renderer.setBackgroundColor(Color.parseColor("#ffffff"));
    renderer.setMarginsColor(Color.parseColor("#ffffff"));
    renderer.setPointSize(pointStrokeWidth);
    renderer.setPanEnabled(true, true);
    //renderer.setPanEnabled(false);
    renderer.setShowLegend(false);
    // renderer.setZoomEnabled(false);
    renderer.setInScroll(true);
    renderer.setClickEnabled(true);
    renderer.setXLabels(0);
    // setscale
    // renderer.setScale((float) 1.5);

    //renderer.setShowAxes(true); 
    // label padding and size
    renderer.setShowCustomTextGrid(true);
    renderer.setLabelsTextSize(20);

    renderer.setXAxisMin(-0.2f);
    double maxX = dashboard.getDaysDashboard().size()-0.9F;
    renderer.setXAxisMax(maxX);

    renderer.setYAxisMin(-0.3f);
    double maxY = dashboard.maxNumberOfContent()-5.0F;
    Log.d(TAG, "max y: "+maxY);
    renderer.setYAxisMax(maxY);

    // y
    renderer.setYLabelsPadding(20);
    renderer.setYLabelsAlign(Align.LEFT);
    // x
    renderer.setXLabelsPadding(20);
    renderer.setXLabelsAlign(Align.CENTER);

    // margins - an array containing the margin size values, in this order:
    // top, left, bottom, right
    int[] margins = {10, 30, 0, 10 };
    renderer.setMargins(margins);

If I set differents maxX values, I can see that my graph change. If I change maxY value, graph didn't change! I try by setting +/-1 at the max Y value of the lines, or adding +/-100, I try with int or double but nothing! Why isn't change my graph padding by changing Y axis values?

line and margin space

Was it helpful?

Solution 3

I solved with this code:

// * ASSIX Y *
renderer.setYLabels(0);
renderer.setYLabelsPadding(35);
renderer.setYLabelsAlign(Align.RIGHT);
// Y max
renderer.setYAxisMax(dashboard.maxNumberOfContent());
// set ASSY numbers label
int unit = dashboard.maxNumberOfContent() / 5;
for (int i = 0; i <= 5; i++) {
    String yLabel = "" + unit * i;
    renderer.addYTextLabel((unit*i), yLabel);
}
renderer.addYTextLabel(dashboard.maxNumberOfContent(), dashboard.maxNumberOfContent()+"");
renderer.setYAxisMax(dashboard.maxNumberOfContent()+(unit/2));

// * ASSIX X *
renderer.setXLabels(0);
renderer.setXLabelsPadding(0);
renderer.setXLabelsAlign(Align.CENTER);
// X max
double maxX = dashboard.getDaysDashboard().size() - 0.9F;
renderer.setXAxisMax(maxX);
// X days label
ArrayList<String> dayNames = getWeekDaysDashboard();
for (int i = 0; i < days.size(); i++) {
    renderer.addXTextLabel(days.get(i), dayNames.get(i));
}


// CUSTOM STYLE LINE CHART
// * background
renderer.setBackgroundColor(Color.parseColor("#ffffff"));
renderer.setMarginsColor(Color.parseColor("#ffffff"));
renderer.setPointSize(pointStrokeWidth);
renderer.setInScroll(true);
renderer.setClickEnabled(true);
renderer.setZoomEnabled(false, false);
renderer.setPanEnabled(false, false);
renderer.setShowLegend(false);
renderer.setShowAxes(true);
// label padding and size
renderer.setShowCustomTextGrid(true);
renderer.setLabelsTextSize(40.0f);
renderer.setXAxisMin(-0.2f);
int yMin = -(unit/5);
Log.d(TAG, "ymin: "+yMin+" // unit: "+unit);
if (yMin < 1) {
    yMin = -1;
}
renderer.setYAxisMin(yMin);
// *** margins: top, left, bottom, right
int[] margins = { 10, 60, 10, 30 };
renderer.setMargins(margins);

(This do the trick: renderer.setYAxisMax(dashboard.maxNumberOfContent()+(unit/2)); )

OTHER TIPS

You can try this:

mRenderer.setMargins(new int[] {0, 50, 0, 0});

second parameter is stand for top margin of graph.

or

 mRenderer.setXLabelsPadding(10);
 mRenderer.setYLabelsPadding(10);
    **parameter for setmargin** 

   // renderer.setMargins(new int[] {margin top, margin left, margin bottom, margin right}

    ex:
    renderer.setMargins(new int[] {90, 60, 20, 30});
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top