Gráfico de línea de AchartEngine Xaxis Android
Estoy trabajando achartengine en android y completado todos los trabajos tengo un problema de cara en la carta de línea menciono la etiqueta de xaxis, pero es muestra como 2,4,6,8,10,12 y así sucesivamente con la superposición con mi etiqueta xaxis y quiero Para ocultar etiquetas 2,4,6,8,10,12 en xaxis. Si u no entiende ver dado abajo figura:
- MPAndroidChart ocultar rejilla de fondo
- ¿Rellenar la escala Y específica con diverso color en carta de la línea usando la biblioteca de la carta del androide de MP?
- Combinación de dos gráficos de barras y dos líneas utilizando aChartEngine en Android
- Color del gradiente para el gráfico de línea dentro de AchartEngine
- Android Line gráfico / gráfico API
Aquí está el código completo:
public class ChartExample extends Activity { private GraphicalView mChartView; XYMultipleSeriesRenderer renderer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_chart); LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2); String[] titles = new String[] { "spens1","2second" }; List<double[]> x = new ArrayList<double[]>(); x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); // } List<double[]> values = new ArrayList<double[]>(); values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 }); values.add(new double[] { 11, 13, 21, 10, 40, 10, 12,15, 24, 20, 15, 12 }); int[] colors = new int[] { Color.BLUE,Color.RED}; PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.CIRCLE}; renderer = buildRenderer(colors, styles); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)) .setFillPoints(true); } setChartSettings(renderer, "SCORE CARD VIEW", "Attetempts", "Marks Scored", 0, 12.5, 0, 45, Color.LTGRAY, Color.LTGRAY); renderer.setXLabels(12); renderer.setYLabels(10); renderer.setShowGrid(false); renderer.setXLabelsAlign(Align.CENTER); renderer.setYLabelsAlign(Align.CENTER); //renderer.setZoomButtonsVisible(true); //renderer.setPanLimits(new double[] { 0, 20, 0, 40 }); //renderer.setZoomLimits(new double[] { 0, 20, 0, 40 }); renderer.setPanEnabled(false, false); renderer.setZoomEnabled(false, false); renderer.setShowLegend(false); for(int k=0;k<12;k++) { renderer.addXTextLabel(k+1,"test"); } if (mChartView == null) { Log.d("Oncreate ", "if (mChartView == null)"); mChartView = ChartFactory.getLineChartView(this, mDataset(titles, x, values), renderer); layout.addView(mChartView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { mChartView.repaint(); Log.d("Oncreate ", "if (mChartView != null)"); } } private void setChartSettings(XYMultipleSeriesRenderer renderer3, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) { // TODO Auto-generated method stub renderer3.setChartTitle(title); renderer3.setXTitle(xTitle); renderer3.setYTitle(yTitle); renderer3.setXAxisMin(xMin); renderer3.setXAxisMax(xMax); renderer3.setYAxisMin(yMin); renderer3.setYAxisMax(yMax); renderer3.setAxesColor(axesColor); renderer3.setLabelsColor(labelsColor); } private XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) { // TODO Auto-generated method stub XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); setRenderer(renderer, colors, styles); return renderer; } private void setRenderer(XYMultipleSeriesRenderer renderer2, int[] colors, PointStyle[] styles) { // TODO Auto-generated method stub renderer2.setAxisTitleTextSize(16); renderer2.setChartTitleTextSize(20); renderer2.setLabelsTextSize(15); renderer2.setLegendTextSize(15); renderer2.setPointSize(5f); renderer2.setMargins(new int[] { 20, 30, 15, 20 }); int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer2.addSeriesRenderer(r); } } private XYMultipleSeriesDataset mDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) { // TODO Auto-generated method stub XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset(); addXYSeries(dataset1, titles, xValues, yValues, 0); return dataset1; } private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues, List<double[]> yValues, int scale) { // TODO Auto-generated method stub int length = titles.length; for (int i = 0; i < length; i++) { double[] xV = xValues.get(i); XYSeries series = new XYSeries(titles[i], scale); double[] yV = yValues.get(i); int seriesLength = xV.length; for (int k = 0; k < seriesLength; k++) { series.add(xV[k], yV[k]); } dataset.addSeries(series); } } }
Puede usted ayudarme con muy apreciado.
- Mostrar el valor cuando se pulsa
- Eliminar etiquetas de puntos del gráfico de líneas mediante la biblioteca MPAndroidChart
- Cómo configurar las etiquetas de los ejes X e Y en el gráfico de línea dual utilizando aChartEngine en android?
- Android AChartEngine - No se puede cambiar textColor de las etiquetas del eje Y
Finalmente conseguí la solución que he intentado este código abajo:
renderer.setXLabels(0);
Y el código completo de la clase aquí:
package com.example.lockexample; import java.util.ArrayList; import java.util.List; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; import org.achartengine.chart.PointStyle; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.app.Activity; import android.graphics.Color; import android.graphics.Paint.Align; import android.os.Bundle; import android.util.Log; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; public class ChartExample extends Activity { private GraphicalView mChartView; XYMultipleSeriesRenderer renderer; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_chart); LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2); String[] titles = new String[] { "spens1","2second" }; List<double[]> x = new ArrayList<double[]>(); x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); // } List<double[]> values = new ArrayList<double[]>(); values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 }); values.add(new double[] { 11, 13, 21, 10, 40, 10, 12,15, 24, 20, 15, 12 }); int[] colors = new int[] { Color.BLUE,Color.RED}; PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.CIRCLE}; renderer = buildRenderer(colors, styles); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)) .setFillPoints(true); } setChartSettings(renderer, "SCORE CARD VIEW", "Attetempts", "Marks Scored", 0, 12.5, 0, 45, Color.LTGRAY, Color.LTGRAY); //renderer.setXLabels(12); renderer.setYLabels(10); renderer.setXLabels(0); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.CENTER); renderer.setYLabelsAlign(Align.RIGHT); renderer.setMargins(new int[] { 25,35, 10, 15 }); //renderer.setZoomButtonsVisible(true); //renderer.setPanLimits(new double[] { 0, 20, 0, 40 }); //renderer.setZoomLimits(new double[] { 0, 20, 0, 40 }); renderer.setPanEnabled(false, false); renderer.setZoomEnabled(false, false); renderer.setMarginsColor(Color.parseColor("#EEEDED")); renderer.setXLabelsColor(Color.BLACK); renderer.setYLabelsColor(0,Color.BLACK); renderer.setApplyBackgroundColor(true); renderer.setBackgroundColor(Color.parseColor("#FBFBFC")); //renderer.setShowLegend(false); for(int k=0;k<12;k++) { renderer.addXTextLabel(k+1,"test"); } if (mChartView == null) { Log.d("Oncreate ", "if (mChartView == null)"); mChartView = ChartFactory.getLineChartView(this, mDataset(titles, x, values), renderer); layout.addView(mChartView, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { mChartView.repaint(); Log.d("Oncreate ", "if (mChartView != null)"); } } private void setChartSettings(XYMultipleSeriesRenderer renderer3, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) { // TODO Auto-generated method stub renderer3.setChartTitle(title); renderer3.setXTitle(xTitle); renderer3.setYTitle(yTitle); renderer3.setXAxisMin(xMin); renderer3.setXAxisMax(xMax); renderer3.setYAxisMin(yMin); renderer3.setYAxisMax(yMax); renderer3.setAxesColor(axesColor); renderer3.setLabelsColor(labelsColor); } private XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) { // TODO Auto-generated method stub XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); setRenderer(renderer, colors, styles); return renderer; } private void setRenderer(XYMultipleSeriesRenderer renderer2, int[] colors, PointStyle[] styles) { // TODO Auto-generated method stub renderer2.setAxisTitleTextSize(16); renderer2.setChartTitleTextSize(20); renderer2.setLabelsTextSize(15); renderer2.setLegendTextSize(15); renderer2.setPointSize(5f); //renderer2.setMargins(new int[] { 20, 30, 15, 20 }); renderer2.setMargins(new int[] { 25,35, 10, 15 }); int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer2.addSeriesRenderer(r); } } private XYMultipleSeriesDataset mDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) { // TODO Auto-generated method stub XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset(); addXYSeries(dataset1, titles, xValues, yValues, 0); return dataset1; } private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues, List<double[]> yValues, int scale) { // TODO Auto-generated method stub int length = titles.length; for (int i = 0; i < length; i++) { double[] xV = xValues.get(i); XYSeries series = new XYSeries(titles[i], scale); double[] yV = yValues.get(i); int seriesLength = xV.length; for (int k = 0; k < seriesLength; k++) { series.add(xV[k], yV[k]); } dataset.addSeries(series); } } }
El único código que debe agregar a su código actual son las siguientes dos líneas:
renderer.setXLabels(RESULT_OK); renderer.clearXTextLabels();
Asegúrese de agregar estas instrucciones después de declarar la configuración de procesador, pero ANTES del código en el que estableció las etiquetas de texto de eje X personalizadas.
Dado que tiene varios métodos de renderizado en curso en su programa, debe incluir las dos líneas de código al final de los métodos que implementan un XYMultipleSeriesRenderer. Una vez más, asegúrese de añadir esto en su código antes de implementar sus etiquetas de texto personalizado. 🙂