2014-03-03 6 views
0

Я использую Multiple Y оси Graph для построения точекнабор данных и визуализация не должны быть пустыми и должны иметь одинаковое количество рядов в AChartEngine

У меня есть 1) X-ось 2) Y1-ось 3) у2 ось

a) Первоначально я использовал для рисования 5 рядов линий по осям Y1 (высота) и одинаковые 5 строк (по весу) по осям Y2 как по оси x ,,,, Здесь нет проблем, , эти ряды линий являются стандартными линиями и используются для каждого расчета,

b) Теперь, если пользователь вводит как его высоту, так и вес, я рисую две дополнительные линии, поэтому есть 12 серий строк, включая стандартные строки,

с) Supppose, если пользователь входит в одиночку Height, но не вес приложение сила закрывает ,, говоря, набор данные и визуализацию не должны быть пустыми и должны иметь одинаковое количество рядов

code follows,, 


public GraphicalView execution(Context context, String UserName, 
      String HeightRepresentation, String WeightRepresentation, 
      ArrayList<Double> mHeightValueCms, 
      ArrayList<Double> mWeightValueKg, 
      ArrayList<Double> mHeightInCmsMonthDate, 
      ArrayList<Double> mWeightInKgMonthDate, 
      ArrayList<Double> mHeightMonth97, ArrayList<Double> mHeightMonth75, 
      ArrayList<Double> mHeightMonth50, ArrayList<Double> mHeightMonth25, 
      ArrayList<Double> mHeightMonth3, ArrayList<Double> mWeightMonth97, 
      ArrayList<Double> mWeightMonth75, ArrayList<Double> mWeightMonth50, 
      ArrayList<Double> mWeightMonth25, ArrayList<Double> mWeightMonth3) { 

XYMultipleSeriesRenderer renderer = null; 
    String[] titles = new String[] { "97%", "75%", "50%", "25%", "3% " }; 
    List<double[]> x = new ArrayList<double[]>(); 
    List<double[]> x1 = new ArrayList<double[]>(); 
    for (int i = 0; i < titles.length; i++) { 
     x.add(new double[] { 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36 }); 
    } 

    List<double[]> values = new ArrayList<double[]>(); 
    values.add(new double[] { mHeightMonth97.get(0), mHeightMonth97.get(1), 
      mHeightMonth97.get(2), mHeightMonth97.get(3), 
      mHeightMonth97.get(4), mHeightMonth97.get(5), 
      mHeightMonth97.get(6), mHeightMonth97.get(7), 
      mHeightMonth97.get(8), mHeightMonth97.get(9), 
      mHeightMonth97.get(10), mHeightMonth97.get(11), 
      mHeightMonth97.get(12) }); 
    values.add(new double[] { mHeightMonth75.get(0), mHeightMonth75.get(1), 
      mHeightMonth75.get(2), mHeightMonth75.get(3), 
      mHeightMonth75.get(4), mHeightMonth75.get(5), 
      mHeightMonth75.get(6), mHeightMonth75.get(7), 
      mHeightMonth75.get(8), mHeightMonth75.get(9), 
      mHeightMonth75.get(10), mHeightMonth75.get(11), 
      mHeightMonth75.get(12) }); 
    values.add(new double[] { mHeightMonth50.get(0), mHeightMonth50.get(1), 
      mHeightMonth50.get(2), mHeightMonth50.get(3), 
      mHeightMonth50.get(4), mHeightMonth50.get(5), 
      mHeightMonth50.get(6), mHeightMonth50.get(7), 
      mHeightMonth50.get(8), mHeightMonth50.get(9), 
      mHeightMonth50.get(10), mHeightMonth50.get(11), 
      mHeightMonth50.get(12) }); 
    values.add(new double[] { mHeightMonth25.get(0), mHeightMonth25.get(1), 
      mHeightMonth25.get(2), mHeightMonth25.get(3), 
      mHeightMonth25.get(4), mHeightMonth25.get(5), 
      mHeightMonth25.get(6), mHeightMonth25.get(7), 
      mHeightMonth25.get(8), mHeightMonth25.get(9), 
      mHeightMonth25.get(10), mHeightMonth25.get(11), 
      mHeightMonth25.get(12) }); 
    values.add(new double[] { mHeightMonth3.get(0), mHeightMonth3.get(1), 
      mHeightMonth3.get(2), mHeightMonth3.get(3), 
      mHeightMonth3.get(4), mHeightMonth3.get(5), 
      mHeightMonth3.get(6), mHeightMonth3.get(7), 
      mHeightMonth3.get(8), mHeightMonth3.get(9), 
      mHeightMonth3.get(10), mHeightMonth3.get(11), 
      mHeightMonth3.get(12) }); 
    int[] colors = null; 
    PointStyle[] styles = null; 
    if (!(mWeightInKgMonthDate.isEmpty() && mHeightInCmsMonthDate.isEmpty())) { 
     renderer = new XYMultipleSeriesRenderer(12); 
     colors = new int[] { 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       Color.GREEN, 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       Color.RED }; 
     styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.TRIANGLE, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.TRIANGLE }; 
    } else 

    if (!mWeightInKgMonthDate.isEmpty() && mHeightInCmsMonthDate.isEmpty()) { 
     renderer = new XYMultipleSeriesRenderer(11); 
     colors = new int[] { 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       Color.RED }; 
     styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.TRIANGLE }; 
    } else 

    if (mWeightInKgMonthDate.isEmpty() && !mHeightInCmsMonthDate.isEmpty()) { 
     renderer = new XYMultipleSeriesRenderer(11); 
     colors = new int[] { 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       Color.GREEN, 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed) }; 
     styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.TRIANGLE, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT }; 
    } else 

    if (mWeightInKgMonthDate.isEmpty() && mHeightInCmsMonthDate.isEmpty()) { 
     renderer = new XYMultipleSeriesRenderer(10); 
     colors = new int[] { 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightGreen), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed), 
       context.getResources().getColor(R.color.LightRed) }; 
     styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, 
       PointStyle.POINT, PointStyle.POINT }; 
    } 


    setRenderer(renderer, colors, styles); 
    int length = renderer.getSeriesRendererCount(); 
    for (int i = 0; i < length; i++) { 
     XYSeriesRenderer r = ((XYSeriesRenderer) renderer 
       .getSeriesRendererAt(i)); 
     r.setFillPoints(true); 
     r.setLineWidth(3f); 
     // /----- 
     r.setShowLegendItem(false); 
    } 
    if(HeightRepresentation.equals("HeightInCms") && WeightRepresentation.equals("WeightInKg")){ 
     setChartSettings(renderer, "Growth Chart For " + UserName, "Month", 
       "Height in (cms)", 0, 36, 45, 180, Color.LTGRAY, Color.LTGRAY); 
     renderer.setYTitle("Weight in (kg)", 1); 
    }else if(HeightRepresentation.equals("HeightInFt") && WeightRepresentation.equals("WeightInKg")){ 
     setChartSettings(renderer, "Growth Chart For " + UserName, "Month", 
       "Height in (ft)", 0, 36, 0, 8, Color.LTGRAY, Color.LTGRAY); 
     renderer.setYTitle("Weight in (kg)", 1); 
    }else if(HeightRepresentation.equals("HeightInCms") && WeightRepresentation.equals("WeightInLbs")){ 
     setChartSettings(renderer, "Growth Chart For " + UserName, "Month", 
       "Height in (cms)", 0, 36, 45, 180, Color.LTGRAY, Color.LTGRAY); 
     renderer.setYTitle("Weight in (lbs)", 1); 
    }else if(HeightRepresentation.equals("HeightInFt") && WeightRepresentation.equals("WeightInLbs")){ 
     setChartSettings(renderer, "Growth Chart For " + UserName, "Month", 
       "Height in (ft)", 0, 36, 0, 8, Color.LTGRAY, Color.LTGRAY); 
     renderer.setYTitle("Weight in (lbs)", 1); 
    } 


    renderer.setXLabels(12); 
    renderer.setYLabels(10); 
    renderer.setShowGrid(true); 
    renderer.setApplyBackgroundColor(true); 
    renderer.setBackgroundColor(Color.BLACK); 
    // renderer.setPointSize(3); 
    // renderer.setGridColor(Color.WHITE); 

    renderer.setXLabelsAlign(Align.RIGHT); 
    renderer.setYLabelsAlign(Align.RIGHT); 
    renderer.setZoomButtonsVisible(true); 
    // renderer.setPanLimits(new double[] { -50, 50, 0, 250 }); 
    // renderer.setZoomLimits(new double[] { -50, 50, 0, 250 }); 
    renderer.setZoomRate(1.05f); 
    renderer.setLabelsColor(Color.WHITE); 
    renderer.setXLabelsColor(Color.WHITE); 
    renderer.setYLabelsColor(0, colors[0]); 
    renderer.setYLabelsColor(1, Color.RED); 


    renderer.setYAxisAlign(Align.RIGHT, 1); 
    renderer.setYLabelsAlign(Align.LEFT, 1); 

    XYMultipleSeriesDataset dataset = null; 
    if (!mHeightInCmsMonthDate.isEmpty() && !mHeightValueCms.isEmpty()) { 
     XYSeries SeperateY1 = new XYSeries(""); 
     for (int i = 0; i < mHeightInCmsMonthDate.size(); i++) { 
      SeperateY1.add(mHeightInCmsMonthDate.get(i), 
        mHeightValueCms.get(i)); 
     } 
     dataset = buildDataset(titles, x, values); 
     dataset.addSeries(SeperateY1); 
    } else { 
     dataset = buildDataset(titles, x, values); 
    } 

    XYSeries seriesMin1, seriesMin2, seriesMin3, seriesMin4, seriesMin5, seriesMin6, seriesMin7, seriesMin8, seriesMin9, seriesMin10, seriesMin11, seriesMin12; 
    if (!mHeightInCmsMonthDate.isEmpty()) { 
     seriesMin1 = dataset.getSeriesAt(0); 
     seriesMin2 = dataset.getSeriesAt(1); 
     seriesMin3 = dataset.getSeriesAt(2); 
     seriesMin4 = dataset.getSeriesAt(3); 
     seriesMin5 = dataset.getSeriesAt(4); 
     seriesMin6 = dataset.getSeriesAt(5); 

     seriesMin1.addAnnotation("3%", 37, 
       mHeightMonth3.get(mHeightMonth3.size() - 1)); 
     seriesMin2.addAnnotation("25%", 37, 
       mHeightMonth25.get(mHeightMonth25.size() - 1)); 
     seriesMin3.addAnnotation("50%", 37, 
       mHeightMonth50.get(mHeightMonth50.size() - 1)); 
     seriesMin4.addAnnotation("75%", 37, 
       mHeightMonth75.get(mHeightMonth75.size() - 1)); 
     seriesMin5.addAnnotation("97%", 37, 
       mHeightMonth97.get(mHeightMonth97.size() - 1)); 
     for (int i = 0; i < mHeightInCmsMonthDate.size(); i++) { 
      seriesMin6.addAnnotation("(" + mHeightInCmsMonthDate.get(i) 
        + " , " + mHeightValueCms.get(i) + ")", 
        mHeightInCmsMonthDate.get(i), mHeightValueCms.get(i)); 
     } 

    } else { 
     seriesMin1 = dataset.getSeriesAt(0); 
     seriesMin2 = dataset.getSeriesAt(1); 
     seriesMin3 = dataset.getSeriesAt(2); 
     seriesMin4 = dataset.getSeriesAt(3); 
     seriesMin5 = dataset.getSeriesAt(4); 

     seriesMin1.addAnnotation("3%", 37, 
       mHeightMonth3.get(mHeightMonth3.size() - 1)); 
     seriesMin2.addAnnotation("25%", 37, 
       mHeightMonth25.get(mHeightMonth25.size() - 1)); 
     seriesMin3.addAnnotation("50%", 37, 
       mHeightMonth50.get(mHeightMonth50.size() - 1)); 
     seriesMin4.addAnnotation("75%", 37, 
       mHeightMonth75.get(mHeightMonth75.size() - 1)); 
     seriesMin5.addAnnotation("97%", 37, 
       mHeightMonth97.get(mHeightMonth97.size() - 1)); 
    } 

    values.clear(); 
    List<double[]> values1 = new ArrayList<double[]>(); 
    List<double[]> values2 = new ArrayList<double[]>(); 
    List<double[]> values3 = new ArrayList<double[]>(); 
    List<double[]> values4 = new ArrayList<double[]>(); 
    List<double[]> values5 = new ArrayList<double[]>(); 
    List<double[]> values6 = new ArrayList<double[]>(); 
    values1.add(new double[] { mWeightMonth97.get(0), 
      mWeightMonth97.get(1), mWeightMonth97.get(2), 
      mWeightMonth97.get(3), mWeightMonth97.get(4), 
      mWeightMonth97.get(5), mWeightMonth97.get(6), 
      mWeightMonth97.get(7), mWeightMonth97.get(8), 
      mWeightMonth97.get(9), mWeightMonth97.get(10), 
      mWeightMonth97.get(11), mWeightMonth97.get(12) }); 
    addXYSeries(dataset, new String[] { "97%" }, x, values1, 1); 
    values2.add(new double[] { mWeightMonth75.get(0), 
      mWeightMonth75.get(1), mWeightMonth75.get(2), 
      mWeightMonth75.get(3), mWeightMonth75.get(4), 
      mWeightMonth75.get(5), mWeightMonth75.get(6), 
      mWeightMonth75.get(7), mWeightMonth75.get(8), 
      mWeightMonth75.get(9), mWeightMonth75.get(10), 
      mWeightMonth75.get(11), mWeightMonth75.get(12) }); 
    addXYSeries(dataset, new String[] { "75%" }, x, values2, 1); 
    values3.add(new double[] { mWeightMonth50.get(0), 
      mWeightMonth50.get(1), mWeightMonth50.get(2), 
      mWeightMonth50.get(3), mWeightMonth50.get(4), 
      mWeightMonth50.get(5), mWeightMonth50.get(6), 
      mWeightMonth50.get(7), mWeightMonth50.get(8), 
      mWeightMonth50.get(9), mWeightMonth50.get(10), 
      mWeightMonth50.get(11), mWeightMonth50.get(12) }); 
    addXYSeries(dataset, new String[] { "50%" }, x, values3, 1); 
    values4.add(new double[] { mWeightMonth25.get(0), 
      mWeightMonth25.get(1), mWeightMonth25.get(2), 
      mWeightMonth25.get(3), mWeightMonth25.get(4), 
      mWeightMonth25.get(5), mWeightMonth25.get(6), 
      mWeightMonth25.get(7), mWeightMonth25.get(8), 
      mWeightMonth25.get(9), mWeightMonth25.get(10), 
      mWeightMonth25.get(11), mWeightMonth25.get(12) }); 
    addXYSeries(dataset, new String[] { "25%" }, x, values4, 1); 
    values5.add(new double[] { mWeightMonth3.get(0), mWeightMonth3.get(1), 
      mWeightMonth3.get(2), mWeightMonth3.get(3), 
      mWeightMonth3.get(4), mWeightMonth3.get(5), 
      mWeightMonth3.get(6), mWeightMonth3.get(7), 
      mWeightMonth3.get(8), mWeightMonth3.get(9), 
      mWeightMonth3.get(10), mWeightMonth3.get(11), 
      mWeightMonth3.get(12) }); 
    addXYSeries(dataset, new String[] { "3% (Weight)" }, x, values5, 1); 
    double[] WeightInKg = null; 
    if (!mWeightValueKg.isEmpty() && !mWeightInKgMonthDate.isEmpty()) { 
     WeightInKg = new double[mWeightValueKg.size()]; 
     for (int i = 0; i < mWeightValueKg.size(); i++) { 
      WeightInKg[i] = mWeightValueKg.get(i); 
     } 
     values6.add(WeightInKg); 
     double[] dateValue = new double[mWeightInKgMonthDate.size()]; 
     for (int i = 0; i < mWeightInKgMonthDate.size(); i++) { 
      dateValue[i] = mWeightInKgMonthDate.get(i); 
     } 
     x1.add(dateValue); 

     addXYSeries(dataset, new String[] { "" }, x1, values6, 1); 
    } 
    if (!mHeightInCmsMonthDate.isEmpty()) { 
     seriesMin7 = dataset.getSeriesAt(6); 
     seriesMin8 = dataset.getSeriesAt(7); 
     seriesMin9 = dataset.getSeriesAt(8); 
     seriesMin10 = dataset.getSeriesAt(9); 
     seriesMin11 = dataset.getSeriesAt(10); 

     seriesMin7.addAnnotation("3%", 37, 
       mWeightMonth3.get(mWeightMonth3.size() - 1)); 
     seriesMin8.addAnnotation("25%", 37, 
       mWeightMonth25.get(mWeightMonth25.size() - 1)); 
     seriesMin9.addAnnotation("50%", 37, 
       mWeightMonth50.get(mWeightMonth50.size() - 1)); 
     seriesMin10.addAnnotation("75%", 37, 
       mWeightMonth75.get(mWeightMonth75.size() - 1)); 
     seriesMin11.addAnnotation("97%", 37, 
       mWeightMonth97.get(mWeightMonth97.size() - 1)); 
     if (!mWeightInKgMonthDate.isEmpty()) { 
      seriesMin12 = dataset.getSeriesAt(11); 
      for (int i = 0; i < mWeightInKgMonthDate.size(); i++) { 
       seriesMin12.addAnnotation("(" + mWeightInKgMonthDate.get(i) 
         + " , " + WeightInKg[i] + ")", 
         mWeightInKgMonthDate.get(i), WeightInKg[i]); 
      } 

     } 

    } else { 
     seriesMin6 = dataset.getSeriesAt(5); 
     seriesMin7 = dataset.getSeriesAt(6); 
     seriesMin8 = dataset.getSeriesAt(7); 
     seriesMin9 = dataset.getSeriesAt(8); 
     seriesMin10 = dataset.getSeriesAt(9); 
     seriesMin6.addAnnotation("3%", 37, 
       mWeightMonth3.get(mWeightMonth3.size() - 1)); 
     seriesMin7.addAnnotation("25%", 37, 
       mWeightMonth25.get(mWeightMonth25.size() - 1)); 
     seriesMin8.addAnnotation("50%", 37, 
       mWeightMonth50.get(mWeightMonth50.size() - 1)); 
     seriesMin9.addAnnotation("75%", 37, 
       mWeightMonth75.get(mWeightMonth75.size() - 1)); 
     seriesMin10.addAnnotation("97%", 37, 
       mWeightMonth97.get(mWeightMonth97.size() - 1)); 
     if (!mWeightInKgMonthDate.isEmpty()) { 
      seriesMin11 = dataset.getSeriesAt(10); 
      for (int i = 0; i < mWeightInKgMonthDate.size(); i++) { 
       seriesMin11.addAnnotation("(" + mWeightInKgMonthDate.get(i) 
         + " , " + WeightInKg[i] + ")", 
         mWeightInKgMonthDate.get(i), WeightInKg[i]); 
      } 

     } 

    } 

    GraphicalView mView = ChartFactory.getCubeLineChartView(context, 
      dataset, renderer, 0.3f); 

return mView; 
} 
+0

Где вы используете метод addSeriesRenderer? – keshav

ответ

0

жаль проблема была с логика я использовал выше, я изменил линию

if (!(mWeightInKgMonthDate.isEmpty() && mHeightInCmsMonthDate.isEmpty())) 

к

if (!mWeightInKgMonthDate.isEmpty() && !mHeightInCmsMonthDate.isEmpty()) 

thats it ..

Смежные вопросы