Линейная диаграмма Android Значения по оси X

У меня возникли некоторые проблемы при попытке заполнить данные в виде диаграммы с помощью библиотеки ACHartEngine в Android. По сути, я пытаюсь создать линейный график с осью X с января по декабрь, независимо от количества месяцев:

введите описание изображения здесь

Начиная с оси х, есть январь - декабрь, хотя некоторые месяцы были с нулевой суммой. Моя проблема сейчас в том, что мне удалось построить график только с указанием количества месяцев. Допустим, в настоящее время в моей базе данных есть следующие записи:

введите описание изображения здесь

Так что в основном мой график будет иметь только июнь, август и сентябрь вместо января - декабря.

Вот как я настроил свой график:

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 ответ

Вы можете использовать MathHelper.NULL_VALUE для значений, которые вы хотите пропустить. Посмотрите пример AChartEngine таблицы значений датчика, чтобы увидеть, как это сделать.

Другие вопросы по тегам