Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android plot fixed values on x angle

Is it possible to create a chart with fixed x and y values? My x values are like 60, 90, 120, 180, 250, 375, 500, 750, 1000, but androidplot creates 9 different values based on equal distances between the values.

Number[] timestamps = {60, 90, 120, 180, 250, 375, 500, 750, 1000};

I am using mySimpleXYPlot.setDomainStep(XYStepMode.SUBDIVIDE, 9); and I guess the solution is around this command, but I do not know how to do it.

enter image description here

Full code:

mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);
         Number[] numSightings = {70, 63, 56, 49, 43, 37, 32, 27, 23};

         Number[] timestamps = {
            60, 90, 120, 180, 250, 375, 500, 750, 1000 

         };

         // create our series from our array of nums:
         XYSeries series2 = new SimpleXYSeries(
                 Arrays.asList(timestamps),
                 Arrays.asList(numSightings),
                 "USA");


         mySimpleXYPlot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE);
         mySimpleXYPlot.getGraphWidget().getGridLinePaint().setColor(Color.BLACK);
         mySimpleXYPlot.getGraphWidget().getGridLinePaint().setPathEffect(new DashPathEffect(new float[]{1,1}, 1));
         mySimpleXYPlot.getGraphWidget().getDomainOriginLinePaint().setColor(Color.BLACK);
         mySimpleXYPlot.getGraphWidget().getRangeOriginLinePaint().setColor(Color.BLACK);

         mySimpleXYPlot.setBorderStyle(Plot.BorderStyle.SQUARE, null, null);
         mySimpleXYPlot.getBorderPaint().setStrokeWidth(1);
         mySimpleXYPlot.getBorderPaint().setAntiAlias(false);
         mySimpleXYPlot.getBorderPaint().setColor(Color.WHITE);

         // Create a formatter to use for drawing a series using LineAndPointRenderer:
         LineAndPointFormatter series1Format = new LineAndPointFormatter(
                 Color.rgb(0, 100, 0),                   // line color
                 Color.rgb(0, 100, 0),                   // point color
                 Color.rgb(100, 200, 0));                // fill color


         // setup our line fill paint to be a slightly transparent gradient:
         Paint lineFill = new Paint();
         lineFill.setAlpha(200);
         lineFill.setShader(new LinearGradient(0, 0, 0, 250, Color.WHITE, Color.GREEN, Shader.TileMode.MIRROR));

         LineAndPointFormatter formatter  = new LineAndPointFormatter(Color.rgb(0, 0,0), Color.BLUE, Color.RED);
         formatter.setFillPaint(lineFill);
         mySimpleXYPlot.getGraphWidget().setPaddingRight(2);
         mySimpleXYPlot.addSeries(series2, formatter);

         // draw a domain tick for each year:
         mySimpleXYPlot.setDomainStep(XYStepMode.SUBDIVIDE, 9);
         mySimpleXYPlot.setRangeBoundaries(-20,100, BoundaryMode.FIXED);

         // customize our domain/range labels
         mySimpleXYPlot.setDomainLabel("Frequency (Hz)");
         mySimpleXYPlot.setRangeLabel("Loud pressure (dB)");
         mySimpleXYPlot.getLegendWidget().setVisible(false);

         // get rid of decimal points in our range labels:
         mySimpleXYPlot.setRangeValueFormat(new DecimalFormat("0"));

         //mySimpleXYPlot.setDomainValueFormat(new MyDateFormat());

         // by default, AndroidPlot displays developer guides to aid in laying out your plot.
         // To get rid of them call disableAllMarkup():
         mySimpleXYPlot.disableAllMarkup();
like image 577
erdomester Avatar asked May 26 '12 16:05

erdomester


1 Answers

XYStepType.INCREMENT_BY_VALUE

This mode creates a tick for every multiple of value above and below the origin. Let's modify the Quick Start example as follows:

mySimpleXYPlot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 1);

This tells XYPlot to draw a tick for every visible domain value (x) where the modulus of x minus domainOrigin is zero, or to put it more simply, draw a tick at every increment of 1 starting from domainOrigin. Now, our plot now looks like this:

enter image description here

From androidplot reference

like image 138
Nino van Hooff Avatar answered Sep 21 '22 13:09

Nino van Hooff