AndroidStudio内用MPAndroidChart制作柱状图(有详细注释)

一、用MPAndroidChart制作柱状图(有详细注释)

package com.example.daohang;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.util.ArrayList;
import java.util.List;

public class F_ym5 extends Fragment {
    private BarChart bc;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.f_ym5,null);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        bc = view.findViewById(R.id.ym5_bc_ddx);


        setDesc();//设置Title
        setLegend();//设置图例
        setXAxis();//设置X坐标
        setYAxis();//设置Y坐标
        loadData();//载入数据
    }

    //设置Title
    private void setDesc() {
        Description description = bc.getDescription();

        // 获取屏幕中间x 轴的像素坐标
        WindowManager wm=(WindowManager)getActivity().getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics dm = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(dm);
        float x = dm.widthPixels / 2;

        description.setPosition(0,0);//设置X轴的位置
        description.setText("");//图表说明性文字
        description.setTextSize(16f);
        description.setTextColor(Color.BLACK);
        bc.setDescription(description);

    }

    //设置图例
    private void setLegend() {
        Legend legend = bc.getLegend();
        legend.setEnabled(false);//隐藏图例
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);//设置排列方式
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);//
        legend.setDrawInside(true);
        legend.setTextSize(14f);
        legend.setTypeface(Typeface.DEFAULT_BOLD);
        legend.setXOffset(30);
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        legend.setTypeface(Typeface.DEFAULT_BOLD);

    }

    //设置Y轴
    private void setYAxis() {
        bc.getAxisRight().setEnabled(false);//设置Y轴右侧轴不显示
        YAxis yAxis = bc.getAxisLeft();//取得Y轴左侧轴对象
        yAxis.setTextSize(10f);//设置字体大小
        yAxis.setTextColor(Color.BLACK);//设置文本颜色
        yAxis.setXOffset(0);//设置在X轴方向的偏移量
        yAxis.setAxisMaximum(800f);//Y轴最大值
        yAxis.setAxisMinimum(-800f);//Y轴最小值
        yAxis.setGranularity(200f);//设置中间距
        yAxis.setLabelCount(3);//设置坐标分栏数
        yAxis.setInverted(false);//设置Y轴是否翻转
        yAxis.setDrawLabels(true);//是否显示标签
}
    //设置X轴
    private void setXAxis() {
        XAxis xAxis = bc.getXAxis();//取得X轴对象
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//X轴标签的位置
        xAxis.setTextSize(10f);//标签字体大小
        xAxis.setTypeface(Typeface.DEFAULT_BOLD);//设置文本的字体
        xAxis.setDrawGridLines(false);//设置为true,则绘制网格线。
        xAxis.setLabelCount(30,true);//设置坐标轴的标签数量
        xAxis.setGranularity (0.3f);//设置坐标轴间隔大小
        xAxis.setAxisMaximum(30f);//设置坐标轴的最大值
        xAxis.setAxisMinimum(0f);//设置坐标轴的最小值
        xAxis.setDrawLabels(false);//不显示标签
        xAxis.setYOffset(0f);//设置在Y轴方向的偏移量

        //自定义格式
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                int tep = (int) (9 - value);
                return tep + "0后";
            }
        });
    }

    //设置数据
    private void loadData() {
        bc.setExtraOffsets(0,0,0,0);设置偏移量
        bc.animateXY(1000,1000);//设置动画

        final float d_1[] = {230f, 480f, 480f, 480f,170f,123f,100f,120f,230f, 480f, 480f, 480f,170f,123f,100f,120f};
        final float d_2[] = { 120f,600f, 400f, -200f,-80f,-80f,630f, 430f, -120f,380f,120f,600f, 400f, 200f,80f,80f};
        List<BarEntry> entries = new ArrayList<BarEntry>();
        List<BarEntry> entries1 = new ArrayList<BarEntry>();

        for(int i = 0; i < d_1.length; i++){
            entries.add(new BarEntry(i,d_1[i]));
            //使用BarEntry的构造方法的第三个参数来保存需要在柱块上显示的数据
            entries1.add(new BarEntry(i,d_2[i]));
        }

        BarDataSet barDataSet = new BarDataSet(entries,"数据1");
        BarDataSet barDataSet1 = new BarDataSet(entries1,"数据2");

        barDataSet.setColor(Color.parseColor("#6D9C00"));
        barDataSet.setDrawValues(false);//不绘制文本
        barDataSet1.setColor(Color.parseColor("#F07408"));
        barDataSet1.setDrawValues(false);//不绘制文本
        barDataSet1.setValueTextColor(Color.RED);
        barDataSet1.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                //获取entry中的数据
                float res = (float) entry.getData();
                return String.format("%.1f",res) + "%";
            }
        });
        BarData barData = new BarData(barDataSet1,barDataSet);
        barData.setBarWidth(0.3f);//设置柱块的宽度
        barData.groupBars(0,-0.3f,0);//设置间距,原点,组间距,组内间距
        bc.setData(barData);
    }
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 MPAndroidChart 绘制横向圆角柱状图的步骤如下: 1. 在你的项目中添加 MPAndroidChart 的依赖。 2. 在 XML 布局文件中添加一个 BarChart 控件。 3. 在代码中获取 BarChart 控件的实例,并进行一些基础设置,如设置 X 轴和 Y 轴的属性。 4. 创建一个 BarDataSet 对象,并设置数据。 5. 创建一个 BarData 对象,并将 BarDataSet 对象添加到 BarData 对象中。 6. 设置 BarData 对象到 BarChart 控件中,并进行一些样式设置,如设置柱状图的颜色、边框宽度等。 7. 最后调用 BarChart 控件的 invalidate() 方法刷新界面即可。 下面是一个示例代码,可以绘制横向圆角柱状图: ```java // 获取 BarChart 控件实例 BarChart barChart = findViewById(R.id.bar_chart); // 设置 X 轴和 Y 轴属性 barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM); barChart.getXAxis().setDrawGridLines(false); barChart.getAxisLeft().setDrawGridLines(false); barChart.getAxisRight().setDrawGridLines(false); // 创建 BarDataSet 对象并设置数据 List<BarEntry> entries = new ArrayList<>(); entries.add(new BarEntry(0f, 5f)); entries.add(new BarEntry(1f, 6f)); entries.add(new BarEntry(2f, 7f)); entries.add(new BarEntry(3f, 8f)); entries.add(new BarEntry(4f, 9f)); BarDataSet dataSet = new BarDataSet(entries, "数据"); // 创建 BarData 对象并将 BarDataSet 添加到其中 BarData data = new BarData(dataSet); // 设置 BarData 到 BarChart 控件中 barChart.setData(data); // 设置柱状图的颜色、边框宽度等 dataSet.setColors(Color.parseColor("#3F51B5")); dataSet.setDrawValues(false); dataSet.setBarBorderWidth(1f); dataSet.setBarBorderColor(Color.parseColor("#3F51B5")); dataSet.setBarBorderRadius(20f); // 刷新界面 barChart.invalidate(); ``` 在上面的示例代码中,我们设置了一个数据集合,包含了 5 个柱状图的数据(横坐标分别是 0 到 4),并设置了柱状图的样式,最后调用 invalidate() 方法刷新界面即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值