Android折线图x轴值

时间:2014-09-01 08:03:12

标签: java android sql arraylist achartengine

在使用Android中的ACHartEngine库尝试将数据填充到折线图时,我遇到了一些问题。基本上我试图在1月到12月创建一个带有x轴的折线图,无论特定月份的数量如何:

enter image description here

从x轴开始,有1月至12月,但有些月份的数量为0。我现在的问题是我只设法绘制了带有金额的月份的图表。让我们说目前我的数据库有这些记录:

enter image description here

所以基本上我的图表只有Jun,Aug和Sep而不是Jan - Dec。

以下是我设置折线图的方法:

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;
    }
}

我想知道有没有办法做到这一点?提前谢谢,抱歉我的语法很差。

1 个答案:

答案 0 :(得分:0)

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