两个日期之间的线图

时间:2018-03-27 06:45:02

标签: android

我有两个日期,根据这些日期,我必须绘制一个图表 x轴和Y轴上的日期我有购买。对于图表,我使用了 MpChart Lib 并且工作正常,但我不知道如何计算x轴的日期

示例:

第一种情况:如果我有2018-03-23和2018-03-28的日期,则差异以天为单位,因此应如何计算MpChart的x轴。

第二种情况:如果我有2017-12-23和2018-03-28的日期,则差异是几周,所以应该如何计算MpChart的x轴。

第3种情况:如果我有2017-01-01和2018-03-28的日期,那么差异就是年份,那么应该如何为MpChart计算x轴。

现在我有了这个:

 private void setData(int count, float range) {

        ArrayList<Entry> values = new ArrayList<Entry>();

        for (int i = 0; i < 12; i++) {
            values.add(new Entry(i, (int) (Math.random() * 65) + 40));
        }

        LineDataSet set1;

        if (mChart.getData() != null &&
                mChart.getData().getDataSetCount() > 0) {
            set1 = (LineDataSet) mChart.getData().getDataSetByIndex(0);
            set1.setValues(values);
            mChart.getData().notifyDataChanged();
            mChart.notifyDataSetChanged();
        } else {
            // create a dataset and give it a type
            set1 = new LineDataSet(values, " ");

            set1.setDrawIcons(false);

            // set the line to be drawn like this "- - - - - -"
            //set1.enableDashedLine(10f, 5f, 0f);
            //set1.enableDashedHighlightLine(10f, 5f, 0f);
            set1.setColor(Color.BLACK);
            // set1.setCircleColor(Color.BLACK);
            set1.setLineWidth(1f);
            // set1.setCircleRadius(3f);
            // set1.setDrawCircleHole(false);
            set1.setDrawCircles(false);
            set1.setValueTextSize(9f);
            set1.setDrawFilled(true);
            set1.setFormLineWidth(1f);
            set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f));
            set1.setFormSize(15.f);
            set1.setDrawValues(false);
            if (Utils.getSDKInt() >= 18) {
                // fill drawable only supported on api level 18 and above
                Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red);
                set1.setFillDrawable(drawable);
            } else {
                set1.setFillColor(Color.BLACK);
            }

            ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
            dataSets.add(set1); // add the datasets

            // create a data object with the datasets
            LineData data = new LineData(dataSets);

            // set data
            mChart.setData(data);
        }
    }

1 个答案:

答案 0 :(得分:0)

MPAndroidChart库是一个非常好的图表/图形库,有许多格式化选项,是的,它可以选择将X轴数据格式化为日期值,甚至可以将其格式化为您想要的任何类型的数据。您只需创建自己的自定义XAxisValueFormatter类,它将实现IAxisValueFormatter接口,但请记住,您需要在时间戳中获取日期才能使用,并且将日期转换为时间戳非常容易。

以下是示例:MyXAxisValueFormatter.java

public class MyXAxisValueFormatter implements IAxisValueFormatter {

@Override
public String getFormattedValue(float value, AxisBase axis) {
    try {
        sdf = new SimpleDateFormat("MMM/yy");           // format your date the way you want
        Long valueLong = (long) value;                  // cast your date value to long
        return sdf.format(new Date(valueLong));         // return the formatted date
    } catch (Exception e) {
        return String.valueOf(value);                   // if any error occurs, return the value as it is 
        }
    }
}

现在在您的主类中,添加以下行:

XAxis xAxis = mChart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter());
xAxis.setLabelCount(4, true);    // it will force the chart to show only 4 date labels on X-Axis 

这里setLabelCount方法会根据你的数据自动找到x轴的范围,所以你不必在setData方法中预先计算和定义它。

You can find more detailed info here.

相关问题