MPAndroidChart con valores nulos
Estoy usando el MPAndroidChart y realmente lo estoy disfrutando.
Una "pequeña" necesidad que tengo es que puedo poner valores nulos a los 'entrys'. Estoy supervisando las conexiones de apache en los servidores de mi sistema, y me gustaría ver si están abajo (donde pongo el valor nulo) o si simplemente no conections (0).
- MPAndroidChart - Las primeras y últimas barras no se representan correctamente
- MPAndroidChart - ¿Cómo mostrar los valores y cuando su valor es cero?
- Cómo añadir títulos de Axis a mpandroidchart
- MPAndroidChart, cómo eliminar porcentajes decimales y no mostrar porcentajes por debajo de 10?
- Cómo resaltar varios valores con MPAndroidChart?
He intentado, pero la clase Entry no acepta 'null' como valor que muestra el mensaje: 'El constructor Entry (null, int) es indefinido'
¡Gracias!
- Cómo MPAndroidChart mostrar todos los valores xaxis
- MPAndroidChart: Ocultar etiquetas de valor en un gráfico de barras apilado
- MPAndroidChart BarChart horizontal / vertical
- MPAndroidChart ¿hay una manera de establecer diferentes colores para diferentes bares?
- En la biblioteca de MPAndroidChart, ¿Cómo envolver etiquetas de eje X en dos líneas cuando es largo?
- Eliminar "No hay datos de gráficos disponibles" de MPAndroidChart y añadir mi propio mensaje
- Cómo formatear valores dentro de MPAndroidChart?
- MPAndroidChart gráfico de relleno
Una posible solución para usted podría ser para comprobar el tiempo el objeto que recibió es nulo , o no. Si el objeto es nulo, ni siquiera crea un objeto Entry
lugar de simplemente establecer su valor en null.
Ejemplo:
// array that contains the information you want to display ConnectionHolder[] connectionHolders = ...; ArrayList<Entry> entries = new ArrayList<Entry>(); int cnt = 0; for(ConnectionHolder ch : connectionHolders) { if(ch != null) entries.add(new Entry(ch.getNrOfConnections(), cnt)); else { // do nothing } cnt++; // always increment }
Esto crearía, por ejemplo, un LineChart
donde no se dibujan círculos en índices donde el objeto ConnectionHolder
era nulo.
Para una versión futura de la biblioteca, intentaré agregar la característica para que se admitan valores nulos.
Mi solución es dibujar otro DataSet con color TRANSPARENTE (o arbitrario): – gráfico con un número fijo de valores de X – los valores de Y se actualizan periódicamente – el indicador booleano indica la parte transparente (u otro color)
private static final int SERIES_SIZE = 360; int xIndex = -1; float xIndexVal; private LineChart chart; private boolean currentFlag; public void createChart(LineDataSet dataSet) { LineData chartData = new LineData(); prepareDataSet(dataSet); chartData.addDataSet(dataSet); for (int i = 0; i < SERIES_SIZE; i++) { chartData.addXValue("" /*+ i*/); } chart.setData(chartData); } private void prepareDataSet(LineDataSet dataSet, YAxis axis, int color) { // configure set } public void update(Float val, boolean flag) { List<ILineDataSet> dsl = chart.getData().getDataSets(); Log.d("chart", String.format("%s --- %d sets, index %d", descr, dsl.size(), xIndex)); if (xIndex == SERIES_SIZE - 1) { // remove all entries at X index 0 for (int i = 0; i < chart.getData().getDataSetCount(); i++) { Entry entry0 = chart.getData().getDataSetByIndex(i).getEntryForIndex(0); if (entry0 != null && entry0.getXIndex() == 0) { chart.getData().removeEntry(entry0, i); Log.d("chart", String.format("entry 0 removed from dataset %d, %d entries in the set", i, chart.getData().getDataSetByIndex(i).getEntryCount())); } else { Log.d("chart", String.format("all %d entries in the set kept", chart.getData().getDataSetByIndex(i).getEntryCount())); } } // remove empty set, if any for (Iterator<ILineDataSet> mit = dsl.iterator(); mit.hasNext(); ) { if (mit.next().getEntryCount() == 0) { mit.remove(); Log.d("chart", String.format("set removed, %d sets", dsl.size())); } } // move all entries by -1 for (ILineDataSet ds : dsl) { for (Entry entry : ((LineDataSet)ds).getYVals()) { entry.setXIndex(entry.getXIndex() - 1); } } } else { xIndex++; } if (currentFlag != flag) { currentFlag = !currentFlag; LineDataSet set = new LineDataSet(null, ""); prepareDataSet(set, chart.getAxisLeft(), currentFlag ? Color.TRANSPARENT : Color.BLUE); chart.getData().addDataSet(set); if (xIndex != 0) { chart.getData().addEntry(new Entry(xIndexVal, xIndex - 1), dsl.size() - 1); } } xIndexVal = val; chart.getData().addEntry(new Entry(val, xIndex), dsl.size() - 1); chart.notifyDataSetChanged(); chart.invalidate(); }
- ¿Puedo cambiar las capturas de pantalla de la aplicación después de publicadas?
- API de Google Drive para Android: sólo Drive.SCOPE_FILE acceso, solo necesita lectura