2014-09-01 163 views
1

我在尝试使用Android中的ACHartEngine库将数据填充到折线图时遇到了一些问题。基本上我想创建从一月至十二月x轴的线图表无论特定月份的量:Android折线图x轴值

enter image description here

从X轴的,有1至12月虽然有些月份是0的金额。我现在的问题是我只设法用数量绘制月份图。我们目前的说,我的数据库中有这些记录:

enter image description here

所以基本上我的图表只会有军,八月和九月,而不是1至12月

这是我如何设置我的折线图:

private void openTotalMonthlyChart() { 
    int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 

    // Creating an XYSeries for Expenses 
    XYSeries expensesSeries = new XYSeries("Expenses"); 
    // Adding data to Expense Series 
    for (int i = 0; i < trans_list.size(); i++) { 
     expensesSeries.add(x[i], trans_list.get(i).getAmount()); 
    } 

    // Creating a dataset to hold each series 
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
    // Adding Expenses Series to the dataset 
    dataset.addSeries(expensesSeries); 

    // Creating XYSeriesRenderer to customize expensesSeries 
    XYSeriesRenderer expensesRenderer = new XYSeriesRenderer(); 
    expensesRenderer.setColor(Color.rgb(124, 181, 236)); 
    expensesRenderer.setPointStyle(PointStyle.CIRCLE); 
    expensesRenderer.setFillPoints(true); 
    expensesRenderer.setLineWidth(2); 
    expensesRenderer.setDisplayChartValues(true); 

    // Creating a XYMultipleSeriesRenderer to customize the whole chart 
    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); 
    multiRenderer.setXLabels(0); 
    multiRenderer.setChartTitle("Total Monthly Expenses"); 
    multiRenderer.setXTitle(""); 
    multiRenderer.setYTitle("Amount"); 
    multiRenderer.setZoomButtonsVisible(true); 

    for (int j = 0; j < trans_list.size(); j++) { 
     multiRenderer.addXTextLabel(j + 1, trans_list.get(j).getDate()); 
    } 

    multiRenderer.addSeriesRenderer(expensesRenderer); 

    // Get the component from XML file 
    RelativeLayout chartContainer = (RelativeLayout) totalMonthlyView 
      .findViewById(R.id.chart_totalMonthly); 

    // Creating a Line Chart 
    chartOverall = ChartFactory.getLineChartView(getActivity(), dataset, 
      multiRenderer); 
    // Adding the Line Chart to the RelativeLayout 
    chartContainer.addView(chartOverall); 
} 

而且我的数据库的SQL语句,其返回的数据与上述第二图像:

public ArrayList<TransactionRecModel> getTotalMonthly() { 
    try { 
     String sql = "SELECT SUM(amount) AS total, SUBSTR(date,4,2) AS Month FROM transactionRec WHERE type = 'W' GROUP BY Month"; 
     Cursor mCur = mDb.rawQuery(sql, null); 
     Log.e(TAG, "Data Grab RECORD Success"); 
     if (mCur.getCount() != 0) { 
      if (mCur.moveToFirst()) { 
       do { 
        TransactionRecModel trm = new TransactionRecModel(); 

        trm.setAmount(mCur.getInt(mCur.getColumnIndex("total"))); 
        trm.setDate(mCur.getString(mCur.getColumnIndex("Month"))); 

        transList.add(trm); 
       } while (mCur.moveToNext()); 
      } 
     } 
     return transList; 
    } catch (SQLException mSQLException) { 
     throw mSQLException; 
    } 
} 

我想知道有没有办法做到这一点?预先感谢,并为我的糟糕的语法感到遗憾。

+0

有什么替代方法吗?因为我不知道如何做到这一点。 – 2014-09-01 14:09:04

回答

0

您可以使用MathHelper.NULL_VALUE作为想要跳过的值。请参阅sensor values chart AChartEngine示例以了解如何执行此操作。