1. 程式人生 > >第三方圖表庫MPAndroidChart的使用

第三方圖表庫MPAndroidChart的使用

折線圖

@Override
protected void initData() {
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
    //設定當前折線圖的描述
    lineChart.setDescription("LOL進入世界總決賽");
    //是否繪製網格佈局
    lineChart.setDrawGridBackground(false);
    //獲取X軸
    XAxis xAxis = lineChart.getXAxis();
    //顯示x軸顯示的位置
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    //顯示x軸的字型
    xAxis.setTypeface(mTf);
    //是否繪製x軸網格線
    xAxis.setDrawGridLines(false);
    //是否繪製x軸的軸線
    xAxis.setDrawAxisLine(true);
    //獲取左邊Y軸物件
    YAxis leftAxis = lineChart.getAxisLeft();
    //顯示y軸的字型
    leftAxis.setTypeface(mTf);
    //引數1:左邊y軸提供的區間的個數  引數2:是否均勻分佈這幾個區間,false代表均勻分佈
    leftAxis.setLabelCount(5, false);
    //獲取右邊Y軸座標
    YAxis rightAxis = lineChart.getAxisRight();
    //設定右邊Y軸的字型
    rightAxis.setTypeface(mTf);
    rightAxis.setLabelCount(5, false);
    //將右邊Y軸設定為不顯示的
    rightAxis.setDrawGridLines(false);

    // 提供折線資料(通常情況下,資料來自於伺服器)
    lineChart.setData(generateDataLine(1));

    //設定動畫和時間
    lineChart.animateX(750);
}


private LineData generateDataLine(int cnt) {

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

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

    LineDataSet d1 = new LineDataSet(e1, "New DataSet " + cnt + ", (1)");
    //設定折線的寬度
    d1.setLineWidth(2.5f);
    //設定小圓圈的寬度
    d1.setCircleSize(4.5f);
    //設定高亮的顏色
    d1.setHighLightColor(Color.rgb(244, 117, 117));
    //是否顯示小圓圈對應的資料
    d1.setDrawValues(false);
    //折線1
    ArrayList<Entry> e2 = new ArrayList<Entry>();

    for (int i = 0; i < 12; i++) {
        e2.add(new Entry(e1.get(i).getVal() - 30, i));
    }
    //折線2
    LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)");
    d2.setLineWidth(2.5f);
    d2.setCircleSize(4.5f);
    d2.setHighLightColor(Color.rgb(244, 117, 117));
    d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
    d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]);
    d2.setDrawValues(false);

    ArrayList<LineDataSet> sets = new ArrayList<LineDataSet>();
    sets.add(d1);
    sets.add(d2);

    LineData cd = new LineData(getMonths(), sets);
    return cd;
}

private ArrayList<String> getMonths() {

    ArrayList<String> m = new ArrayList<String>();
    m.add("Jan");
    m.add("Feb");
    m.add("Mar");
    m.add("Apr");
    m.add("May");
    m.add("Jun");
    m.add("Jul");
    m.add("Aug");
    m.add("Sep");
    m.add("Okt");
    m.add("Nov");
    m.add("Dec");

    return m;
}


柱狀圖

@Override
protected void initData() {
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
   barChart.setDescription("華為手機的銷售額");
   barChart.setDrawGridBackground(false);
    //是否繪製柱狀圖的背景
   barChart.setDrawBarShadow(false);

    XAxis xAxis =barChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTypeface(mTf);
    xAxis.setDrawGridLines(false);
    xAxis.setDrawAxisLine(true);

    YAxis leftAxis =barChart.getAxisLeft();
    leftAxis.setTypeface(mTf);
    leftAxis.setLabelCount(5, false);
    //設定最大值距離頂部的距離
    leftAxis.setSpaceTop(20f);

    YAxis rightAxis =barChart.getAxisRight();
    rightAxis.setTypeface(mTf);
    rightAxis.setLabelCount(5, false);
    rightAxis.setSpaceTop(20f);
    BarData barData = generateDataBar(1);
    barData.setValueTypeface(mTf);

    // set data
   barChart.setData( barData);

    // 設定Y軸物件動畫
   barChart.animateY(700);
}



private BarData generateDataBar(int cnt) {

    ArrayList<BarEntry> entries = new ArrayList<BarEntry>();

    for (int i = 0; i < 12; i++) {
        entries.add(new BarEntry((int) (Math.random() * 70) + 30, i));
    }

    BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt);
    //設定相鄰的柱狀圖之間的距離
    d.setBarSpacePercent(20f);
    d.setColors(ColorTemplate.VORDIPLOM_COLORS);
    //設定高亮的透明度
    d.setHighLightAlpha(255);

    BarData cd = new BarData(getMonths(), d);
    return cd;
}
private ArrayList<String> getMonths() {

    ArrayList<String> m = new ArrayList<String>();
    m.add("Jan");
    m.add("Feb");
    m.add("Mar");
    m.add("Apr");
    m.add("May");
    m.add("Jun");
    m.add("Jul");
    m.add("Aug");
    m.add("Sep");
    m.add("Okt");
    m.add("Nov");
    m.add("Dec");

    return m;
}


餅圖


@Override
protected void initData() {
    //字型庫
    mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
    pieChart.setDescription("Android廠商2017年手機佔有率");
    //最內層圓的半徑
    pieChart.setHoleRadius(52f);
    //包裹內層圓的半徑
    pieChart.setTransparentCircleRadius(57f);
    //設定中央字型
    pieChart.setCenterText("Android\n廠商佔比");
    pieChart.setCenterTextTypeface(mTf);
    pieChart.setCenterTextSize(18f);
    //是否顯示百分比,true:各部分的百分比和是100%
    pieChart.setUsePercentValues(true);
    PieData pieData = generateDataPie(1);
    //設定樣式為百分比
    pieData.setValueFormatter(new PercentFormatter());
    pieData.setValueTypeface(mTf);
    pieData.setValueTextSize(11f);
    pieData.setValueTextColor(Color.RED);

    pieChart.setData(pieData);
    //獲取右上角描述結構的物件
    Legend l = pieChart.getLegend();
    l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);
    l.setYEntrySpace(0f);//相鄰的entry在y軸上的間距
     l.setYOffset(30f);//設定第一個entry距離頂部的距離

    pieChart.animateXY(900, 900);
}

private PieData generateDataPie(int cnt) {

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

    for (int i = 0; i < 4; i++) {
        entries.add(new Entry((int) (Math.random() * 70) + 30, i));
    }

    PieDataSet d = new PieDataSet(entries, "");

    //相鄰模組的間距
    d.setSliceSpace(2f);
    d.setColors(ColorTemplate.VORDIPLOM_COLORS);

    PieData cd = new PieData(getQuarters(), d);
    return cd;
}

private ArrayList<String> getQuarters() {

    ArrayList<String> q = new ArrayList<String>();
    q.add("三星");
    q.add("華為");
    q.add("vivo");
    q.add("OPPO");

    return q;
}