MPAndroidChart 绘制 饼状图、柱状图和折线图简单汇总

news/2024/11/29 17:33:41/

查看详细参数:https://blog.csdn.net/dianziagen/article/details/75385224

首先导入依赖:

1、 在Project目录下的build.gradle中添加如下所示的代码:

  1. allprojects {repositories {google()jcenter()maven { url "https://jitpack.io" }}}


2、在app目录下的build.gradle中的dependencies闭包下添加如下代码:

implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

饼状图 

饼状图示例:

 

布局文件xml:

        <!--饼状图--><com.github.mikephil.charting.charts.PieChartandroid:id="@+id/ma_pieChart"android:layout_width="match_parent"android:layout_height="200dp"/>


java代码

/*** 饼状图*/private void initPieChart() {ma_pieChart = findViewById(R.id.ma_pieChart);//创建描述信息Description desc = new Description();desc.setPosition(150,100);desc.setTextSize(12);desc.setTextColor(Color.RED);desc.setText("饼状图");// 饼状图设置 ma_pieChart.setDescription(desc);ma_pieChart.setExtraOffsets(50, 50, 50, 20);//设置pieChart图表上下左右的偏移,类似于外边距ma_pieChart.setHoleRadius(0f);//空心半径ma_pieChart.setTransparentCircleRadius(0f);//设置PieChart内部透明圆的半径(这里设置0fma_pieChart.setDragDecelerationFrictionCoef(0.95f);//设置pieChart图表转动阻力摩擦系数[0,1]ma_pieChart.setRotationAngle(0);//设置pieChart图表起始角度ma_pieChart.setHighlightPerTapEnabled(true);//设置piecahrt图表点击Item高亮是否可用ma_pieChart.setEntryLabelColor(Color.BLACK);//字体颜色ma_pieChart.setRotationEnabled(false);// 设置pieChart图表是否可以手动旋转// 饼状图触摸监听事件ma_pieChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {/**选中饼状图区域**/@Overridepublic void onValueSelected(Entry e,Highlight h) {Log.e("*************", "开启");// 转换对象PieEntry pieEntry = (PieEntry) e;Toast.makeText(getApplicationContext(),pieEntry.getLabel(),Toast.LENGTH_SHORT).show();}/**未中饼状图区域**/@Overridepublic void onNothingSelected() {Log.e("*************", "关闭");}});// 数据ArrayList<PieEntry> pieEnters = new ArrayList();pieEnters.add(new PieEntry(46f,"华为"));pieEnters.add(new PieEntry(20f,"小米"));pieEnters.add(new PieEntry(30f,"OPPO"));pieEnters.add(new PieEntry(4f,"苹果"));PieDataSet dataSet = new PieDataSet(pieEnters,"");// 颜色ArrayList<Integer> colors = new ArrayList();colors.add(Color.RED);colors.add(Color.GREEN);colors.add(Color.BLUE);colors.add(Color.YELLOW);// 设置颜色值dataSet.setColors(colors);//数据连接线距图形片内部边界的距离,为百分数dataSet.setValueLinePart1OffsetPercentage(80f);//设置线的长度dataSet.setValueLinePart1Length(0.9f);dataSet.setValueLinePart2Length(0.9f);// 设置线的颜色dataSet.setValueLineColor(Color.BLACK);//设置文字和数据图外显示dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);/**设置图例**/Legend legend = ma_pieChart.getLegend();legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);legend.setOrientation(Legend.LegendOrientation.VERTICAL);legend.setDrawInside(false);legend.setXEntrySpace(7f);legend.setYEntrySpace(0f);legend.setYOffset(0f);/**设置数据**/PieData pieData = new PieData(dataSet);pieData.setDrawValues(true);pieData.setValueFormatter(new PercentFormatter());//显示百分比pieData.setValueTextColor(Color.BLACK);// 百分比字体颜色pieData.setValueTextSize(12f);// 百分比字体大小ma_pieChart.setData(pieData);ma_pieChart.animateX(1400,Easing.EasingOption.EaseInOutQuad);//X轴动画//    ma_pieChart.animateY(1400,Easing.EasingOption.EaseInOutQuad);//Y轴动画ma_pieChart.invalidate();}

柱状图

柱状图示例:

布局文件xml:

        <!--柱状图--><com.github.mikephil.charting.charts.BarChartandroid:id="@+id/ma_barChart"android:layout_width="match_parent"android:layout_height="200dp"/>

 java代码:

/*** 柱状图*/private void initBarChart() {ma_barChart = findViewById(R.id.ma_barChart);ma_barChart.getDescription().setEnabled(false); // 不显示描述ma_barChart.setExtraOffsets(20,20,20,20); // 设置饼图的偏移量,类似于内边距 ,设置视图窗口大小ma_barChart.setDragEnabled(false);// 是否可以拖拽ma_barChart.setScaleEnabled(false);//是否可放大ma_barChart.setDrawGridBackground(false);//是否绘制网格线/**设置坐标轴**/// 设置x轴XAxis xAxis = ma_barChart.getXAxis();xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);  // 设置x轴显示在下方,默认在上方xAxis.setDrawGridLines(false); // 将此设置为true,绘制该轴的网格线。xAxis.setLabelCount(5);  // 设置x轴上的标签个数xAxis.setTextSize(15f); // x轴上标签的大小final String labelName[] = {"周一","周二","周三","周四","周五"};// 设置x轴显示的值的格式xAxis.setValueFormatter(new IAxisValueFormatter() {@Overridepublic String getFormattedValue(float value,AxisBase axis) {if ((int) value < labelName.length) {return labelName[(int) value];} else {return "";}}});xAxis.setYOffset(15); // 设置标签对x轴的偏移量,垂直方向//ma_barChart.animateX(1400,Easing.EasingOption.EaseInSine);// X轴动画// 设置y轴,y轴有两条,分别为左和右YAxis yAxis_right = ma_barChart.getAxisRight();yAxis_right.setAxisMaximum(1200f);  // 设置y轴的最大值yAxis_right.setAxisMinimum(0f);  // 设置y轴的最小值yAxis_right.setEnabled(false);  // 不显示右边的y轴YAxis yAxis_left = ma_barChart.getAxisLeft();yAxis_left.setAxisMaximum(1200f);yAxis_left.setAxisMinimum(0f);yAxis_left.setTextSize(15f); // 设置y轴的标签大小ma_barChart.animateY(1400,Easing.EasingOption.EaseInSine);// y轴动画/**设置图例**/Legend legend = ma_barChart.getLegend();legend.setFormSize(12f); // 图例的图形大小legend.setTextSize(15f); // 图例的文字大小legend.setDrawInside(true); // 设置图例在图中legend.setOrientation(Legend.LegendOrientation.VERTICAL); // 图例的方向为垂直legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); //显示位置,水平右对齐legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); // 显示位置,垂直上对齐// 设置水平与垂直方向的偏移量legend.setYOffset(10f);legend.setXOffset(10f);/**设置数据**/List<IBarDataSet> sets = new ArrayList<>();// 此处有两个DataSet,所以有两条柱子,BarEntry()中的x和y分别表示显示的位置和高度// x是横坐标,表示位置,y是纵坐标,表示高度List<BarEntry> barEntries1 = new ArrayList<>();barEntries1.add(new BarEntry(0, 390f));barEntries1.add(new BarEntry(1, 1100f));barEntries1.add(new BarEntry(2, 900f));barEntries1.add(new BarEntry(3, 700f));barEntries1.add(new BarEntry(4, 300f));BarDataSet barDataSet1 = new BarDataSet(barEntries1, "");barDataSet1.setValueTextColor(Color.RED); // 值的颜色barDataSet1.setValueTextSize(15f); // 值的大小barDataSet1.setColor(Color.parseColor("#1AE61A")); // 柱子的颜色barDataSet1.setLabel("蔬菜"); // 设置标签之后,图例的内容默认会以设置的标签显示// 设置柱子上数据显示的格式barDataSet1.setValueFormatter(new IValueFormatter() {@Overridepublic String getFormattedValue(float value,Entry entry,int dataSetIndex,ViewPortHandler viewPortHandler) {// 此处的value默认保存一位小数return value + "斤";}});sets.add(barDataSet1);List<BarEntry> barEntries2 = new ArrayList<>();barEntries2.add(new BarEntry(0, 210f));barEntries2.add(new BarEntry(1, 450f));barEntries2.add(new BarEntry(2, 430f));barEntries2.add(new BarEntry(3, 440f));barEntries2.add(new BarEntry(4, 180f));BarDataSet barDataSet2 = new BarDataSet(barEntries2, "");// 不显示第二根柱子上的值barDataSet2.setDrawValues(false); // 不显示值barDataSet2.setColor(Color.parseColor("#F7F709"));barDataSet2.setLabel("水果");sets.add(barDataSet2);BarData barData = new BarData(sets);barData.setBarWidth(0.4f); // 设置柱子的宽度ma_barChart.setData(barData);}

折线图

折线图示例:

布局文件xml:

        <!--折线图--><com.github.mikephil.charting.charts.LineChartandroid:id="@+id/ma_lineChart"android:layout_width="match_parent"android:layout_height="200dp"/>

java代码:

/*** 折线图* */private void initLineChart(){ma_lineChart = findViewById(R.id.ma_lineChart);//X轴所在位置   默认为上面ma_lineChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//隐藏右边的Y轴ma_lineChart.getAxisRight().setEnabled(false);//创建描述信息Description description =new Description();description.setPosition(1000,100);description.setText("测试图表");description.setTextColor(Color.RED);description.setTextSize(12);ma_lineChart.setDescription(description);//设置图表描述信息ma_lineChart.setNoDataText("没有数据熬");//没有数据时显示的文字ma_lineChart.setNoDataTextColor(Color.BLUE);//没有数据时显示文字的颜色ma_lineChart.setDrawGridBackground(false);//chart 绘图区后面的背景矩形将绘制ma_lineChart.setDrawBorders(false);//禁止绘制图表边框的线//ma_lineChart.setBorderColor(); //设置 chart 边框线的颜色。//ma_lineChart.setBorderWidth(); //设置 chart 边界线的宽度,单位 dp。//ma_lineChart.setLogEnabled(true);//打印日志/*** Entry 坐标点对象  构造函数 第一个参数为x点坐标 第二个为y点*/ArrayList<Entry> values1 = new ArrayList<>();ArrayList<Entry> values2 = new ArrayList<>();values1.add(new Entry(4,10));values1.add(new Entry(6,15));values1.add(new Entry(9,20));values1.add(new Entry(12,5));values1.add(new Entry(15,30));values2.add(new Entry(3,110));values2.add(new Entry(6,115));values2.add(new Entry(9,130));values2.add(new Entry(12,85));values2.add(new Entry(15,90));//LineDataSet每一个对象就是一条连接线LineDataSet set1;LineDataSet set2;//判断图表中原来是否有数据if (ma_lineChart.getData() != null &&ma_lineChart.getData().getDataSetCount() > 0) {//获取数据1set1 = (LineDataSet) ma_lineChart.getData().getDataSetByIndex(0);set1.setValues(values1);set2= (LineDataSet) ma_lineChart.getData().getDataSetByIndex(1);set2.setValues(values2);//刷新数据ma_lineChart.getData().notifyDataChanged();ma_lineChart.notifyDataSetChanged();} else {//设置数据1  参数1:数据源 参数2:图例名称set1 = new LineDataSet(values1,"测试数据1");set1.setColor(Color.BLACK);set1.setCircleColor(Color.BLACK);set1.setLineWidth(1f);//设置线宽set1.setCircleRadius(3f);//设置焦点圆心的大小set1.enableDashedHighlightLine(10f,5f,0f);//点击后的高亮线的显示样式set1.setHighlightLineWidth(2f);//设置点击交点后显示高亮线宽set1.setHighlightEnabled(true);//是否禁用点击高亮线set1.setHighLightColor(Color.RED);//设置点击交点后显示交高亮线的颜色set1.setValueTextSize(9f);//设置显示值的文字大小set1.setDrawFilled(false);//设置禁用范围背景填充//格式化显示数据final DecimalFormat mFormat = new DecimalFormat("###,###,##0");set1.setValueFormatter(new IValueFormatter() {@Overridepublic String getFormattedValue(float value,Entry entry,int dataSetIndex,ViewPortHandler viewPortHandler) {return mFormat.format(value);}});if (Utils.getSDKInt() >= 18) {set1.setFillAlpha(Color.argb(1,255,0,0));//设置范围背景填充} else {set1.setFillColor(Color.BLACK);}//设置数据2set2 = new LineDataSet(values2,"测试数据2");set2.setColor(Color.GRAY);set2.setCircleColor(Color.GRAY);set2.setLineWidth(1f);set2.setCircleRadius(3f);set2.setValueTextSize(10f);//保存LineDataSet集合ArrayList<ILineDataSet> dataSets = new ArrayList<>();dataSets.add(set1); // add the datasetsdataSets.add(set2);//创建LineData对象 属于LineChart折线图的数据集合LineData data = new LineData(dataSets);// 添加到图表中ma_lineChart.setData(data);//ma_lineChart.animateX(1400,Easing.EasingOption.EaseInOutSine);// y轴动画ma_lineChart.animateY(1400,Easing.EasingOption.EaseInOutSine);// y轴动画//绘制图表ma_lineChart.invalidate();}}


http://www.ppmy.cn/news/785474.html

相关文章

Pyecharts(一) —— 配置项图表类型

Python数据可视化 Pyecharts(一) —— 配置项&图表类型一、图形参数配置1.1 全局配置项1.2 系列配置项1.3 运行环境 二、图表类型2.1 直角坐标系图表2.2 地理坐标系图表2.3 树型图表2.4 3D图表2.4 组合图表2.5 其他图表(如Page) Pyecharts(一) —— 配置项&图表类型 大…

【Web前端】CSS详解(上篇)

在学习CSS之前&#xff0c;你需要对HTML的知识有所了解&#xff01; 一起学习CSS吧&#xff01; 一.CSS简介 1.什么是CSS&#xff1f; 二.CSS语法 1.语法规则2.注释 三.CSS选择器 1.CSS的id选择器2.CSS的class选择器 四.CSS创建 1.外部样式表2.内部样式表3.内联样式4.多重样式…

css之 vertical-align用法详解

目录 基本知识默认例子1、baseline 基线对齐2、上标 super 和 下标 sub 2.1 sub2.2 super 3、top 和 bottom 3.1 top3.2 bottom 4、text-top 和 text-bottom 4.1 text-top4.2 text-bottom 5、middle 中线对齐6、% 百分比7、具体的值 基本知识 vertical-align 属性设置元素的…

系列 | 漫谈数仓第四篇NO.4 『数据应用』(BIOLAP)

点击上方蓝色字体&#xff0c;置顶/星标哦 目前10000人已关注加入我们 本文目录CONTENTS ☞ 01.可视化BI工具 [ 开源BI&#xff0c;商业BI&#xff0c;传统BI ] ☞ 02.OLAP科普 [ ROLAP MOLAP HOLAP ] ☞ 03.OLAP引擎 [ Kylin Druid Presto Impala Kudu ADB ES .. ] 本文之前…

Html与CSS基础知识篇(Html标签语法篇2)

前言&#xff1a;上章我们主要介绍Html中常用到的一些标签&#xff0c;最后我们提到了表格<table>标签&#xff0c;它默认显示没有表格线&#xff0c;但是我们常见到的都会有表格线的&#xff0c;那样既美观也实用。下面我们着重介绍一下CSS样式 用CSS样式&#xff0c;为…

技术合伙人必备攻略---app开发技术栈调研--多种方案对比--uniapp学习路线

app开发技术方案对比 app开发主要有几种技术方案如下: 原生开发 原生开发简介 原生(native)开发从定义上来说 一般是指用原生开发语言开发,原生开发语言就是开发整个系统时使用的编程语言。 对于iOS来说就是Objective C,对于Android来说…不太好说,因为Android用的Lin…

2021-10-20 HTML中的常用标签及属性

<body> :bgcolor:设置网页背景颜色&#xff0c;background:设置背景图片。<p>&#xff1a;段落标签,align:水平对齐方式。有left&#xff0c;center&#xff0c;right。<h1>&#xff1a;标题&#xff0c;有h1~h6&#xff0c;h1最大。<font>字体标签&am…

【新媒体 | 自媒体 运营】虚拟素材(图片,字体,音频,视频)商用及CC版权相关问题

文章目录 1、常见问题1.1 常见的版权问题1.2 常见的版权协议 2、可商用素材2.1 可商用图片2.2 可商用字体2.3 可商用音频2.4 可商用视频 1、常见问题 1.1 常见的版权问题 版权法的保护对象&#xff1f; 版权&#xff1a;作品的著作权&#xff0c;无需申请&#xff0c;自动保护…