private void updatePlot(SeriesSize seriesSize) { // Remove all current series from each plot plot.clear(); // Setup our Series with the selected number of elements series1 = new SimpleXYSeries( Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Us"); series2 = new SimpleXYSeries( Arrays.asList(series2Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Them"); plot.setDomainBoundaries(-1, series1.size(), BoundaryMode.FIXED); plot.setRangeUpperBoundary( SeriesUtils.minMax(series1, series2).getMaxY().doubleValue() + 1, BoundaryMode.FIXED); if (seriesSize != null) { switch (seriesSize) { case TEN: plot.setDomainStep(StepMode.INCREMENT_BY_VAL, 2); break; case TWENTY: plot.setDomainStep(StepMode.INCREMENT_BY_VAL, 4); break; case SIXTY: plot.setDomainStep(StepMode.INCREMENT_BY_VAL, 6); break; } } // add a new series' to the xyplot: if (series1CheckBox.isChecked()) plot.addSeries(series1, formatter1); if (series2CheckBox.isChecked()) plot.addSeries(series2, formatter2); // Setup the BarRenderer with our selected options MyBarRenderer renderer = plot.getRenderer(MyBarRenderer.class); renderer.setBarOrientation((BarRenderer.BarOrientation) spRenderStyle.getSelectedItem()); final BarRenderer.BarGroupWidthMode barGroupWidthMode = (BarRenderer.BarGroupWidthMode) spWidthStyle.getSelectedItem(); renderer.setBarGroupWidth( barGroupWidthMode, barGroupWidthMode == BarRenderer.BarGroupWidthMode.FIXED_WIDTH ? sbFixedWidth.getProgress() : sbVariableWidth.getProgress()); if (BarRenderer.BarOrientation.STACKED.equals(spRenderStyle.getSelectedItem())) { plot.getInnerLimits().setMaxY(15); } else { plot.getInnerLimits().setMaxY(0); } plot.redraw(); }
/** DESCRIPTION: Clears the plot widget, then plots the data again. */ private void redrawPlot() { plot.clear(); drawPlot(); plot.redraw(); }
void generatePlot() { TextView tv = (TextView) findViewById(R.id.plotViewTitle); tv.setText( "Avistamientos durante " + meses[actualMonth - 1] + " del " + String.valueOf(actualYear)); SQLiteDatabase myDB = null; myDB = this.openOrCreateDatabase(DB_NAME, 1, null); myDB.execSQL( "CREATE TABLE IF NOT EXISTS " + TABLE + " (" + ADDR_DB + " TEXT NOT NULL PRIMARY KEY, " + COORD_X_DB + " INTEGER NOT NULL, " + COORD_Y_DB + " INTEGER NOT NULL, " + INF_DB + " TEXT, " + DAY_DB + " INTEGER, " + MONTH_DB + " INTEGER, " + YEAR_DB + " INTEGER);"); /* * Solo obtendremos los días donde se han visto avistamientos ordenados por menor a mayor. */ String[] FROM = {DAY_DB}; String ORDER_BY = YEAR_DB + " DESC, " + MONTH_DB + " DESC, " + DAY_DB + " DESC"; Cursor c = myDB.query( TABLE, FROM, MONTH_DB + "=" + actualMonth + " AND " + YEAR_DB + "=" + actualYear, null, null, null, ORDER_BY); /* * Preparamos el vector de Number dependiendo del mes que tengamos que mostrar */ Number[] series1Numbers; int daysOfMonth = 0; if (actualMonth == 1 || actualMonth == 3 || actualMonth == 5 || actualMonth == 7 || actualMonth == 8 || actualMonth == 10 || actualMonth == 12) { daysOfMonth = 32; series1Numbers = new Number[daysOfMonth]; for (int i = 0; i < daysOfMonth; ++i) series1Numbers[i] = 0; } else if (actualMonth == 2) { daysOfMonth = 29; series1Numbers = new Number[daysOfMonth]; for (int i = 0; i < daysOfMonth; ++i) series1Numbers[i] = 0; } else { daysOfMonth = 31; series1Numbers = new Number[daysOfMonth]; for (int i = 0; i < daysOfMonth; ++i) series1Numbers[i] = 0; } int max = 0; // sirve para establecer el máximo Y valor del gráfico int aux = 0; int dayAux = 0; startManagingCursor(c); while (c.moveToNext()) { int dayDB = c.getInt(0); if (max < aux) max = aux; if (dayAux == 0) { dayAux = dayDB; ++aux; } else { if (dayAux == dayDB) ++aux; else { series1Numbers[dayAux] = aux; aux = 1; dayAux = dayDB; } } } if (dayAux != 0) series1Numbers[dayAux] = aux; c.close(); if (myDB != null) { myDB.close(); } // Inicializamos el objeto XYPlot búscandolo desde el layout: mySimpleXYPlot = (XYPlot) findViewById(R.id.plot); mySimpleXYPlot.clear(); mySimpleXYPlot.setDomainLabel("Días de " + meses[actualMonth - 1]); mySimpleXYPlot.setRangeLabel("Número de avistamientos"); // Añadimos Línea Número UNO: XYSeries series1 = new SimpleXYSeries( Arrays.asList(series1Numbers), // Array de datos SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Valores verticales "Número de avistamientos"); // Nombre de la serie // Modificamos los colores de la primera serie LineAndPointFormatter series1Format = new LineAndPointFormatter( Color.rgb(200, 0, 0), // Color de la l�nea Color.rgb(0, 0, 0), // Color del punto Color.rgb(190, 150, 150)); // Relleno // Una vez definida la serie (datos y estilo), la añadimos al panel mySimpleXYPlot.addSeries(series1, series1Format); if (max == 0) ++max; // Tuneamos el grafico mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("#")); mySimpleXYPlot.setDomainBoundaries(1, daysOfMonth - 1, BoundaryMode.FIXED); mySimpleXYPlot.setDomainStepValue(daysOfMonth); if (daysOfMonth == 32) { mySimpleXYPlot.setTicksPerDomainLabel(2); } else if (daysOfMonth == 31) { mySimpleXYPlot.setTicksPerDomainLabel(3); } else if (daysOfMonth == 28) { mySimpleXYPlot.setTicksPerDomainLabel(2); } mySimpleXYPlot.setRangeUpperBoundary(max + 2, BoundaryMode.FIXED); mySimpleXYPlot.setRangeStepValue(max + 3); mySimpleXYPlot.setTicksPerRangeLabel(1); mySimpleXYPlot.disableAllMarkup(); /* * Generamos la vista de nueva para mostrar la nueva gráfica */ ScrollView sv = (ScrollView) findViewById(R.id.scrollView); sv.postInvalidate(); }