2016-08-29 5 views
2

私はMP LineChartを実装しました。 one以外のものはすべて動作しています.x軸の最後に最初の月が追加されます。値は最初のものから2番目の点から始まります。私はいくつかのソリューションをGoogleで提供したが、成功することはできませんでした。 たとえば、次のスクリーンショットでは、私の月リストに[apr、may、jun、jul、aug]が含まれていますが、末尾と行の余分なaprの追加はaprではないかもしれません。 以下は私のコードです。折れ線グラフのX_axisに1つ余分な値を表示したMPチャート?

String[] mMonths; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_multi_line_chart); 
    context = this; 
    mpref = new MySharedPreferences(this); 
    charts_list = new ArrayList<Charts_Data_Model>(); 
    mChart = (LineChart) findViewById(R.id.chart1); 
    mChart.setOnChartValueSelectedListener(this); 

    mChart.setDrawGridBackground(false); 
    mChart.setDescription("VSC CHART"); 
    mChart.setDrawBorders(false); 

    mChart.getAxisLeft().setEnabled(true); 
    mChart.getAxisRight().setDrawAxisLine(false); 
    mChart.getAxisRight().setEnabled(false); 
    mChart.getAxisRight().setDrawGridLines(false); 
    mChart.getXAxis().setDrawAxisLine(true); 
    mChart.getXAxis().setDrawGridLines(true); 

    // enable touch gestures 
    mChart.setTouchEnabled(true); 

    // enable scaling and dragging 
    mChart.setDragEnabled(true); 
    mChart.setScaleEnabled(true); 

    // if disabled, scaling can be done on x- and y-axis separately 
    mChart.setPinchZoom(true); 


    Legend l = mChart.getLegend(); 
    l.setPosition(Legend.LegendPosition.ABOVE_CHART_LEFT); 
    l.setXEntrySpace(7f); 
    l.setYEntrySpace(0f); 
    l.setYOffset(0f); 
    l.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT); 
    l.setWordWrapEnabled(true); 


    new Task4().execute(); 

    } 


    class Task4 extends AsyncTask<Void, Void, String> { 

    @Override 
    protected void onPreExecute() { 
     pDialog = new ProgressDialog(MultiLineChartActivity.this); 
     pDialog.setMessage("please wait"); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(Void... arg0) { 


     getChartDataHadsM(); 


     //Record method 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     super.onPostExecute(result); 
     XAxis xAxis = mChart.getXAxis(); 
     xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
     xAxis.setAxisMinValue(0f); 
     xAxis.setAvoidFirstLastClipping(true); 
     // xAxis.setGranularityEnabled(false); 
     xAxis.setGranularity(1f); 

     xAxis.setValueFormatter(new AxisValueFormatter() { 
      @Override 
      public String getFormattedValue(float value, AxisBase axis) { 
       return mMonths[(int) value % mMonths.length]; 
      } 

      @Override 
      public int getDecimalDigits() { 
       return 0; 
      } 
     }); 


     LineData data = new LineData(sets); 
     mChart.setData(data); 
     mChart.invalidate(); 
     pDialog.dismiss(); 

    } 
} 

    public void getChartDataHadsM() { 
    mMonths = new String[charts_list_HadsM.size()]; 
    ArrayList<Entry> e1 = new ArrayList<Entry>(); 
    ArrayList<Entry> e2 = new ArrayList<Entry>(); 

    int size = charts_list_HadsM.size(); 
    for (int i = 0; i < size; i++) { 

     String month = charts_list_HadsM.get(i).month; 
     mMonths[i] = month; 
     String anx = charts_list_HadsM.get(i).anx; 
     String dep = charts_list_HadsM.get(i).dep; 

     e1.add(new Entry(i + 1, Integer.parseInt(anx))); 
     e2.add(new Entry(i + 1, Integer.parseInt(dep))); 


    } 
    sets = new ArrayList<ILineDataSet>(); 
    if (!e1.isEmpty()) { 
     LineDataSet d1 = new LineDataSet(e1, "anxiety"); 
     d1.setLineWidth(2.5f); 
     d1.setCircleRadius(4.5f); 
     d1.setHighLightColor(Color.rgb(244, 117, 117)); 
     d1.setDrawValues(false); 
     sets.add(d1); 
    } 
    if (!e2.isEmpty()) { 
     LineDataSet d2 = new LineDataSet(e2, "depression"); 
     d2.setLineWidth(2.5f); 
     d2.setCircleRadius(4.5f); 
     d2.setHighLightColor(Color.rgb(244, 117, 117)); 
     d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); 
     d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); 
     d2.setDrawValues(false); 
     sets.add(d2); 
    } 


} 

Screen Shot of my line chart

任意のヒントやヘルプをいただければ幸いしてください。

答えて

1

私は使用しているチャートセットで作業していません。しかし、あなたが記述しているエラーとあなたのようなイメージは、インデックスを乱しています。

私はソースを見直していると私は私が疑わしい見つけ、確認したいことがあり、次のものが見つかりました:

基本的に
for (int i = 0; i < size; i++) { 
// your month list is 0-based 
    String month = charts_list_HadsM.get(i).month; 
    mMonths[i] = month; 
    String anx = charts_list_HadsM.get(i).anx; 
    String dep = charts_list_HadsM.get(i).dep; 


// Your data list is 1-based 
// You add the data at (i+1) effectively skipping position 0 
    e1.add(new Entry(i + 1, Integer.parseInt(anx))); 
    e2.add(new Entry(i + 1, Integer.parseInt(dep))); 


} 

、あなたの月は今1つの伝説少なすぎる持っており、それは伝説と思われますエントリーの終わりに達すると回転します。

それはあなたのイメージにマッチする:4月のコラムで

、何の価値は、それがMAYで始まる、ありません。その後、値が追加されますが、凡例に月があるより1つ多くの値があります。したがって、凡例は余分な値を表示するためにAPRで再開します。

私はこの修正プログラムを提案する:あなたはちょうど私の一日を救ったのthnx

for (int i = 0; i < size; i++) { 
// your month list is 0-based 
    String month = charts_list_HadsM.get(i).month; 
    mMonths[i] = month; 
    String anx = charts_list_HadsM.get(i).anx; 
    String dep = charts_list_HadsM.get(i).dep; 


// Make entries index 0-based, too 
    e1.add(new Entry(i, Integer.parseInt(anx))); 
    e2.add(new Entry(i, Integer.parseInt(dep))); 
} 
+0

。 –

関連する問題