精华内容
参与话题
问答
  • android chart MPchart

    2016-02-22 15:00:17
    android chart MPchart
  • MPChart源码

    热门讨论 2014-12-18 16:47:44
    这个是通过MPAndroidChart做的一个曲线图的MPChart源码,随便下载
  • MPchart使用详解及详细属性(一)

    万次阅读 多人点赞 2016-04-28 10:06:04
    项目源代码:https://github.com/libin7278/MpChart 第一步 添加依赖或导入Library dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile '...

    项目源代码:https://github.com/libin7278/MpChart

    第一步 添加依赖或导入Library

        dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:23.2.0'
        compile 'com.github.PhilJay:MPAndroidChart:v2.2.3'
    }
    

    github:https://github.com/PhilJay/MPAndroidChart

    第二步 布局文件

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:textSize="30sp"
            android:textColor="#ff00ff"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="MPchartDemo"/>
    
    
        <com.github.mikephil.charting.charts.BarChart
            android:id="@+id/day_fragment_bar_chart"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/seekBar1" />
    </LinearLayout>
    

    第三步 MainActivity代码

    package com.tunshu.mydemo;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    import com.github.mikephil.charting.charts.BarChart;
    import com.github.mikephil.charting.data.BarData;
    import com.github.mikephil.charting.data.BarDataSet;
    import com.github.mikephil.charting.data.BarEntry;
    
    import java.util.ArrayList;
    
    
    public class MainActivity extends Activity {
        private BarChart day_fragment_bar_chart;
        private BarData mBarData;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            day_fragment_bar_chart= (BarChart) findViewById(R.id.day_fragment_bar_chart);
    
    		//getBarData(X轴坐标个数, X所对应的值也就是Y值)
            mBarData = getBarData(24, 10);
            showBarChart(day_fragment_bar_chart, mBarData);
    
        }
    
    	/**
    	 *用来处理视图的方法
    	 */
        private void showBarChart(BarChart barChart, BarData barData) {
    
        }
    
    	/**
    	 *用来处理数据的方法
    	 */
        private BarData getBarData(int count, float range) {
            ArrayList<String> xValues = new ArrayList<String>();
            for (int i = 0; i < count; i++) {
                xValues.add(i + "");
            }
    
            ArrayList<BarEntry> yValues = new ArrayList<BarEntry>();
    
            for (int i = 0; i < count; i++) {
                float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
                yValues.add(new BarEntry(value, i));
            }
    
            // y轴的数据集合
            BarDataSet barDataSet = new BarDataSet(yValues, "collection");
    
            ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>();
            barDataSets.add(barDataSet); // add the datasets
    
            BarData barData = new BarData(xValues, barDataSet);
    
            return barData;
        }
    }
    
    

    在MainActivity中已经封装好了处理数据和视图的方法;
    这里写图片描述

    第四步 详细属性介绍

    private void showBarChart(BarChart barChart, BarData barData) {
            // 如果没有数据的时候,会显示这个,类似ListView的EmptyView
            barChart.setNoDataTextDescription("You need to provide data for the chart.");
        }
    

    这里写图片描述

    private void showBarChart(BarChart barChart, BarData barData) {
            barChart.setData(barData); // 设置数据
        }
    

    这里写图片描述

    barChart.setDrawBorders(true); //是否在折线图上添加边框
    

    这里写图片描述

    barChart.setDescription("数据描述");// 数据描述
    barChart.setDescriptionPosition(100,20);//数据描述的位置
    barChart.setDescriptionColor(Color.GRAY);//数据的颜色
    barChart.setDescriptionTextSize(40);//数据字体大小
    

    如果此处不想要描述必须要设置 barChart.setDescription("");不然会显示默认的 Description。
    这里写图片描述

    barChart.setDrawGridBackground(true); // 是否显示表格颜色
    barChart.setGridBackgroundColor(Color.RED); // 表格的的颜色
    

    这里写图片描述

    barChart.setTouchEnabled(false); // 设置是否可以触摸
    barChart.setDragEnabled(false);// 是否可以拖拽
    barChart.setScaleEnabled(false);// 是否可以缩放
    barChart.setPinchZoom(false);//y轴的值是否跟随图表变换缩放;如果禁止,y轴的值会跟随图表变换缩放
    
    barChart.setBackgroundColor(Color.BLACK);// 设置整个图表控件的背景
    

    这里写图片描述

     barChart.setDrawBarShadow(true);//柱状图没有数据的部分是否显示阴影效果
    

    这里写图片描述

    barChart.setDrawValueAboveBar(false);//柱状图上面的数值是否在柱子上面
    

    这里写图片描述

    //是否显示竖直标尺线
    barChart.getXAxis().setDrawGridLines(false);
    

    这里写图片描述
    这里写图片描述

    //设置横坐标显示的间隔数
    barChart.getXAxis().setLabelsToSkip(4);
    

    这里写图片描述

    //设置横坐标倾斜角度
    barChart.getXAxis().setLabelRotationAngle(20);
    

    这里写图片描述

    //设置横坐标之间的间隔距离 float值 
    //不能与setLabelsToSkip()一起使用否则失效
    barChart.getXAxis().setSpaceBetweenLabels(50);
    

    这里写图片描述

    //是否显示X轴数值
    //默认是true
    barChart.getXAxis().setDrawLabels(false);
    

    这里写图片描述

    //右侧是否显示Y轴数值
    barChart.getAxisRight().setDrawLabels(false);
    

    这里写图片描述

    //是否显示最右侧竖线
    barChart.getAxisRight().setEnabled(false);
    

    这里写图片描述

    //自定义Y轴文字样式
    YAxisValueFormatter custom = new MyYAxisValueFormatter();
    baChart.getAxisLeft().setValueFormatter(custom);
    
     public class MyYAxisValueFormatter implements YAxisValueFormatter {
    
            private DecimalFormat mFormat;
    
            public MyYAxisValueFormatter() {
                mFormat = new DecimalFormat("###,###,###,##0");
            }
    
            @Override
            public String getFormattedValue(float value, YAxis yAxis) {
                return mFormat.format(value) + "K";
            }
        }
    

    这里写图片描述

    //设置比例图标的位置  barChart.getLegend().setPosition(Legend.LegendPosition.RIGHT_OF_CHART);
    //设置比例图标和文字之间的位置方向barChart.getLegend().setDirection(Legend.LegendDirection.RIGHT_TO_LEFT);
    barChart.getLegend().setTextColor(Color.RED);
    

    这里写图片描述

    //设置动画
    barChart.animateXY(2000,3000);
    
    // y轴的数据集合
    BarDataSet barDataSet = new BarDataSet(yValues, "collection");
            
    barDataSet.setBarSpacePercent(80);
    barDataSet.setVisible(true);//是否显示柱状图柱子
    barDataSet.setColor(Color.RED);//设置柱子颜色
    barDataSet.setDrawValues(false);//是否显示柱子上面的数值
    
    package com.tunshu.mydemo;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    
    import com.github.mikephil.charting.charts.BarChart;
    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.formatter.YAxisValueFormatter;
    
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    
    
    public class MainActivity extends Activity {
        private BarChart day_fragment_bar_chart;
        private BarData mBarData;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            day_fragment_bar_chart= (BarChart) findViewById(R.id.day_fragment_bar_chart);
    
            mBarData = getBarData(24, 10);
            showBarChart(day_fragment_bar_chart, mBarData);
    
        }
    
        private void showBarChart(BarChart barChart, BarData barData) {
            // 如果没有数据的时候,会显示这个,类似ListView的EmptyView
            barChart.setNoDataTextDescription("You need to provide data for the chart.");
    
            barChart.setData(barData); // 设置数据
    
            barChart.setDrawBorders(false); //是否在折线图上添加边框
    
            barChart.setDescription("数据描述");// 数据描述
            barChart.setDescriptionPosition(100,20);//数据描述的位置
            barChart.setDescriptionColor(Color.RED);//数据的颜色
            barChart.setDescriptionTextSize(40);//数据字体大小
    
            barChart.setDrawGridBackground(false); // 是否显示表格颜色
            barChart.setGridBackgroundColor(Color.RED); // 表格的的颜色
            //barChart.setBackgroundColor(Color.BLACK);// 设置整个图标控件的背景
            barChart.setDrawBarShadow(false);//柱状图没有数据的部分是否显示阴影效果
    
            barChart.setTouchEnabled(false); // 设置是否可以触摸
            barChart.setDragEnabled(false);// 是否可以拖拽
            barChart.setScaleEnabled(false);// 是否可以缩放
            barChart.setPinchZoom(false);//y轴的值是否跟随图表变换缩放;如果禁止,y轴的值会跟随图表变换缩放
    
            barChart.setDrawValueAboveBar(true);//柱状图上面的数值显示在柱子上面还是柱子里面
    
            barChart.getXAxis().setDrawGridLines(false);//是否显示竖直标尺线
            barChart.getXAxis().setLabelsToSkip(11);//设置横坐标显示的间隔
    //        barChart.getXAxis().setLabelRotationAngle(20);//设置横坐标倾斜角度
    //        barChart.getXAxis().setSpaceBetweenLabels(50);
            barChart.getXAxis().setDrawLabels(true);//是否显示X轴数值
            barChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴的位置 默认在上方
    
            barChart.getAxisRight().setDrawLabels(false);//右侧是否显示Y轴数值
            barChart.getAxisRight().setEnabled(false);//是否显示最右侧竖线
            barChart.getAxisRight().setDrawAxisLine(true);
            barChart.getAxisLeft().setDrawAxisLine(false);
            barChart.getXAxis().setDrawAxisLine(true);
    
    
            YAxisValueFormatter custom = new MyYAxisValueFormatter();//自定义Y轴文字样式
            barChart.getAxisLeft().setValueFormatter(custom);
    
            barChart.getLegend().setPosition(Legend.LegendPosition.RIGHT_OF_CHART);//设置比例图标的位置
            barChart.getLegend().setDirection(Legend.LegendDirection.RIGHT_TO_LEFT);//设置比例图标和文字之间的位置方向
            barChart.getLegend().setTextColor(Color.RED);
    
            barChart.animateXY(2000,3000);
        }
    
        private BarData getBarData(int count, float range) {
            ArrayList<String> xValues = new ArrayList<String>();
            for (int i = 0; i < count; i++) {
                xValues.add(i + "");
            }
    
            ArrayList<BarEntry> yValues = new ArrayList<BarEntry>();
    
            for (int i = 0; i < count; i++) {
                float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
                yValues.add(new BarEntry(value, i));
            }
    
            // y轴的数据集合
            BarDataSet barDataSet = new BarDataSet(yValues, "collection");
    
            barDataSet.setBarSpacePercent(80);
            barDataSet.setVisible(true);//是否显示柱状图柱子
            barDataSet.setColor(Color.RED);//设置柱子颜色
            barDataSet.setDrawValues(false);//是否显示柱子上面的数值
    
            ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>();
            barDataSets.add(barDataSet); // add the datasets
    
            BarData barData = new BarData(xValues, barDataSet);
    
            return barData;
        }
    
        public class MyYAxisValueFormatter implements YAxisValueFormatter {
    
            private DecimalFormat mFormat;
    
            public MyYAxisValueFormatter() {
                mFormat = new DecimalFormat("###,###,###,##0");
            }
    
            @Override
            public String getFormattedValue(float value, YAxis yAxis) {
                return mFormat.format(value) + "K";
            }
        }
    }
    

    这里写图片描述

    //设置Y轴显示数量
    barChart.getAxisLeft().setLabelCount(2,false);
    

    扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

    公众号回复“资料获取”,获取更多干货哦~

    有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

    展开全文
  • MPChart控件使用示例

    2018-05-28 20:20:14
    使用MPChart控件示例,显示一组数据,支持通过手势进行X轴或Y轴缩放,适合初学者,可以简单地学习控件的使用!
  • MPChart使用教程示例

    2015-12-30 09:35:41
    MPChart 简易教程 http://blog.csdn.net/wingichoy/article/details/50428246
  • Android图表样例 MPChart

    2016-12-01 16:05:55
    Android图表样例 MPChart
  • MpChart使用

    千次阅读 2019-03-27 22:01:24
      经过对比,MpChart是一款相对成熟的第三方库。通过使用这个库以及修改源码,UI功能以及完成。其中包括绘制折线图和柱形图,做此记录,方便以后使用参考。 1.XAxis 图形的X轴: XAxis xAxis = mChart....

      需要开发一些图形绘制相关的UI;
      经过对比,MpChart是一款相对成熟的第三方库。通过使用这个库以及修改源码,UI功能以及完成。其中包括绘制折线图和柱形图,做此记录,方便以后使用参考。

    1.XAxis

    图形的X轴:

        XAxis xAxis = mChart.getXAxis();
    

    1.1 设置X轴位置( TOP, BOTTOM, BOTH_SIDED, TOP_INSIDE, BOTTOM_INSIDE)

        xAxis.setPosition(XAxis.XAxisPosition.TOP);       
        xAxis.setPosition(XAxis.XAxisPosition.TOP_INSIDE);   // 在X轴内
    

    1.2 设置X轴的长度

        xAxis.setAxisMinimum(0.8f);      // 初始刻度为0.8f
        xAxis.setAxisMaximum(10.2f);     // 最大刻度为10.2f
        xAxis.setGranularity(1f);		 // 设置轴的最小间隔
    

    1.3 关于坐标显示

        xAxis.setDrawAxisLine(false);     // 设置不画X轴
    

    1.4 设置X轴不可用

        xAxis.setEnabled(false);
    

    1.5 网格线

        xAxis.setDrawGridLines(true);   					// 设置是否画网格线
        xAxis.setGridLineWidth(2);       					// 线宽
        xAxis.setGridColor(Color.RED);            			// 颜色
        xAxis.setGridDashedLine(DashPathEffect effect);     // 虚线
    

    1.6

    	xAxis.setCenterAxisLabels(true);					// 刻度居中
    

    1.7 定制化X轴坐标
    只需要重写以下方法即可:

        xAxis.setTextSize(15);                  
        xAxis.setTextColor(Color.RED);
        xAxis.setValueFormatter(new ValueFormatter() {
                @Override
                public String getFormattedValue(float value) {
                    return "Day"+value;
                }
            });
    

    有时候需要换行的X轴:
    需要新建一个CustomXAxisRenderer的类,重写drawLabel方法,绘制X坐标:

        // 需要新建一个CustomXAxisRenderer的类
        public class CustomXAxisRenderer extends XAxisRenderer {
        
            public CustomXAxisRenderer(ViewPortHandler viewPortHandler, com.github.mikephil.charting.components.XAxis xAxis, Transformer trans) {
                super(viewPortHandler, xAxis, trans);
            }
        
            @Override
            protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) {
                // 换行
                String[] lines = formattedLabel.split("\n");
                if(lines.length<=1){
                    super.drawLabel(c, formattedLabel, x, y, anchor, angleDegrees);
                }
                for (int i = 0; i < lines.length; i++) {
                    float vOffset = i * mAxisLabelPaint.getTextSize();
                    // 绘制
                    Utils.drawXAxisValue(c, lines[i], x, y + vOffset, mAxisLabelPaint, anchor, angleDegrees);
                }
            }
        }
    
        // 对chart重新设置X轴渲染器    
        mChart.setXAxisRenderer(
                    new CustomXAxisRenderer(mChart.getViewPortHandler(), 
                            mChart.getXAxis(), 
                            mChart.getTransformer(YAxis.AxisDependency.LEFT)));       
    

    2.Chart

    在这里插入图片描述

    2.1 MpChart的Chart是可以对图像进行手势缩放的,禁用:

        mChart.setScaleEnabled(false);
    

    2.2 设置点击点后显示的自定义描述View

    	// 自定义MarkerView
    	public class MyMarkerView extends MarkerView {
    		private final TextView tvContent;
    		public MyMarkerView(Context context, int layoutResource) {
            	super(context, layoutResource);
            	tvContent = findViewById(R.id.tv_content);
        	}
        	@Override
        	public void refreshContent(Entry e, Highlight highlight) {
            	if (e instanceof CandleEntry) {
                	CandleEntry ce = (CandleEntry) e;
                	tvContent.setText(Utils.formatNumber(ce.getHigh(), 0, true));
            	} else {
                	tvContent.setText(Utils.formatNumber(e.getY(), 0, true));
            	}
            super.refreshContent(e, highlight);
        	}
        	@Override
        	public MPPointF getOffset() {
            	return new MPPointF(-(getWidth() / 2), -getHeight());
        	}
    	}
    	// custom_marker_view 自定义布局
        MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
            mv.setChartView(mChart);
            mChart.setMarker(mv);
    

    2.3 移动到指定位置

    	mChart.moveViewToX(float xValue);
    	mChart.moveViewTo(float xValue, float yValue, AxisDependency axis);
    	mChart.moveViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration);
    	mChart.centerViewTo(float xValue, float yValue, AxisDependency axis);
    	mChart.centerViewToY(float yValue, AxisDependency axis);
    	mChart.centerViewToAnimated(float xValue, float yValue, AxisDependency axis, long duration);
    

    2.4 设置显示范围

    	mChart.setVisibleXRange(float minXRange, float maxXRange);
    	mChart.setVisibleXRangeMaximum(float maxXRange);
    	mChart.setVisibleYRange(float minYRange, float maxYRange, AxisDependency axis);
    	mChart.setVisibleYRangeMaximum(float maxYRange, AxisDependency axis);
    	mChart.setVisibleYRangeMinimum(float minYRange, AxisDependency axis);
    

    3.数据

    3.1 折线图封装数据键值对的类为LineData,柱形图则是BarData。

    	// 先创建一些键值对
     	ArrayList<Entry> values1 = new ArrayList<>();
    	for (int i = 1; i < size; i++) {
    		// i为x,右边的随机数为Y值 ,可对x+0.5f使其显示在中央
    		values1.add(new Entry(i, (int) (Math.random() * 55) +5));
    	}
    	// 折线
    	// 一根折线
    	LineDataSet d1 = new LineDataSet(values1, "折线描述");
    	// 将折线放进折线List,可以添加多根折线
    	ArrayList<ILineDataSet> sets = new ArrayList<>();
        sets.add(d1);
        // 折线图数据
        LineData data = new LineData(sets);
        mChart.setData(data);
    	
    	// 柱形图数据
    	BarData data = new BarData();
    	data.setBarWidth(float mBarWidth);
    

    3.2 DataSet
      数据相关的设置:颜色、标记、样式等;
    1.LineDataSet

    	d.setLineWidth(2.5f);				// 线宽
        d.setHighLightColor(Color.rgb(217, 117, 117)); // 十字线颜色
    	d.setDrawValues(false);			// 点上有值
    	d.setCircleRadius(4.5f);			// 圆环半径
    	d.setDrawCircleHole(false);		// 画圆环 否
        d.enableDashedLine(10f, 5f, 0f);   // 折线为虚线
    

    2.BarDataSet

    	d.setDrawValues(false);   									// 柱形图上的值
    	d.setGradientColor(int startColor, int endColor);			// 柱形图渐变色
    

    下载

    1.mpchart下载:作者https://github.com/PhilJay/MPAndroidChart

    总结

    1.跟X轴Y轴有关的在Axis类里面;
    2.跟图形绘制,X轴Y轴等绘制相关的在render里面;
    3.跟数据相关的数据点颜色,绘制线宽等在DataSet;

    展开全文
  • import android.graphics.Color; import android.graphics.drawable.Drawable...import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.AxisBase; import com....
    
    
    import android.graphics.Color;
    import android.graphics.drawable.Drawable;
    
    import com.github.mikephil.charting.charts.LineChart;
    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.LimitLine;
    import com.github.mikephil.charting.components.XAxis;
    import com.github.mikephil.charting.components.YAxis;
    import com.github.mikephil.charting.data.Entry;
    import com.github.mikephil.charting.data.LineData;
    import com.github.mikephil.charting.data.LineDataSet;
    import com.github.mikephil.charting.formatter.IAxisValueFormatter;
    import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
    
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by Yangzb on 2018/10/10 10:14
     * E-mail:yangzongbin@si-top.com
     * Describe:
     */
    public class LineChartManager {
        private LineChart lineChart;
        private XAxis xAxis;                //X轴
        private YAxis leftYAxis;            //左侧Y轴
        private YAxis rightYAxis;           //右侧Y轴 自定义XY轴值
        private Legend legend;              //图例
        private LimitLine limitLine;        //限制线
    
        public LineChartManager(LineChart lineChart) {
            this.lineChart = lineChart;
            leftYAxis = lineChart.getAxisLeft();
            rightYAxis = lineChart.getAxisRight();
            xAxis = lineChart.getXAxis();
    
            initChart(lineChart);
        }
        /**
         * 初始化图表
         */
        private void initChart(LineChart lineChart) {
            lineChart.setNoDataTextColor(Color.parseColor("#0099E1"));
            lineChart.setNoDataText("没有数据");
            /***图表设置***/
            //是否展示网格线
            lineChart.setDrawGridBackground(false);
            lineChart.setBackgroundColor(Color.WHITE);
            //是否显示边界
            lineChart.setDrawBorders(false);
            //是否有触摸事件
            lineChart.setTouchEnabled(true);
            //是否可以拖动
            lineChart.setDragEnabled(true);
            lineChart.setDoubleTapToZoomEnabled(true);
            //是否缩放Y轴
            lineChart.setScaleYEnabled(false);
    
            //设置XY轴动画效果
    //        lineChart.animateY(500);
    //        lineChart.animateX(500);
            Description description = new Description();
    //        description.setText("需要展示的内容");
            description.setEnabled(false);
            lineChart.setDescription(description);
    
    
            /***XY轴的设置***/
            xAxis = lineChart.getXAxis();
            leftYAxis = lineChart.getAxisLeft();
            rightYAxis = lineChart.getAxisRight();
    
            xAxis.setDrawGridLines(false);
            rightYAxis.setDrawGridLines(false);
            leftYAxis.setDrawGridLines(false);
    
            //设置Y轴网格线为虚线
            leftYAxis.enableGridDashedLine(10f, 10f, 0f);
            leftYAxis.setEnabled(false);
            rightYAxis.setEnabled(false);
            //leftYAxis.setStartAtZero(false);
    
            //X轴设置显示位置在底部
            xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
            xAxis.setAxisMinimum(0f);
            xAxis.setGranularity(1f);
            xAxis.setAvoidFirstLastClipping(true);
    
            //保证Y轴从0开始,不然会上移一点
            leftYAxis.setAxisMinimum(0f);
    //        rightYAxis.setAxisMinimum(0f);
    
            /***折线图例 标签 设置***/
            legend = lineChart.getLegend();
            //设置显示类型,LINE CIRCLE SQUARE EMPTY 等等 多种方式,查看LegendForm 即可
            legend.setForm(Legend.LegendForm.LINE);
            legend.setTextSize(12f);
            //显示位置 左下方
            legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
            legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
            legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
            //是否绘制在图表里面
            legend.setDrawInside(false);
            //是否显示
            legend.setEnabled(false);
        }
        public void showX(boolean show){
            xAxis.setEnabled(show);
        }
        /**
         * 展示一条曲线 默认x轴
         *
         * @param yData    y轴的数据
         * @param lineName 曲线名称
         * @param color    曲线颜色
         */
        public void showOneLineChart(List<Float> yData, String lineName, int color) {
            ArrayList<Entry> entries = new ArrayList<>();
            for (int i = 0; i < yData.size(); i++) {
                entries.add(new Entry(i, yData.get(i)));
            }
    
            // 每一个LineDataSet代表一条线
            LineDataSet lineDataSet = new LineDataSet(entries, lineName);
            // CUBIC_BEZIER 圆滑曲线
            initLineDataSet(lineDataSet, color, LineDataSet.Mode.CUBIC_BEZIER);
    
            LineData data = new LineData();
            data.addDataSet(lineDataSet);
            lineChart.setData(data);
            lineChart.invalidate();
        }
        /**
         * 曲线初始化设置 一个LineDataSet 代表一条曲线
         *
         * @param lineDataSet 线条
         * @param color       线条颜色
         * @param mode
         */
        private void initLineDataSet(LineDataSet lineDataSet, int color, LineDataSet.Mode mode) {
            lineDataSet.setColor(color);
            lineDataSet.setCircleColor(color);
            lineDataSet.setLineWidth(1f);
            lineDataSet.setCircleRadius(3f);
    
            lineDataSet.setDrawCircles(false);
            lineDataSet.setDrawValues(false);
            //设置曲线值的圆点是实心还是空心
            lineDataSet.setDrawCircleHole(false);
            lineDataSet.setValueTextSize(10f);
            //设置折线图填充
            lineDataSet.setDrawFilled(false);
            lineDataSet.setFormLineWidth(1f);
            lineDataSet.setFormSize(15.f);
            if (mode != null) {
                //设置曲线展示为圆滑曲线(如果不设置则默认折线)
                lineDataSet.setDrawCircles(false);
                lineDataSet.setMode(mode);
                lineDataSet.setCubicIntensity(0.2f);//置曲线顺滑度
            }
        }
        /**
         * 展示一条曲线 默认x轴
         *
         * @param yData    y轴的数据
         * @param lineName 曲线名称
         * @param color    曲线颜色
         */
        public void showOneLineChartNoModo(List<Float> yData, String lineName, int color) {
            ArrayList<Entry> entries = new ArrayList<>();
            for (int i = 0; i < yData.size(); i++) {
                entries.add(new Entry(i, yData.get(i)));
            }
    
            // 每一个LineDataSet代表一条线
            LineDataSet lineDataSet = new LineDataSet(entries, lineName);
            // CUBIC_BEZIER 圆滑曲线 null表示折线
            initLineDataSet(lineDataSet, color, null);
    
            LineData data = new LineData();
            data.addDataSet(lineDataSet);
            lineChart.setData(data);
            lineChart.invalidate();
        }
        /**
         * 注意 集合的长度一致,在此未做处理
         *
         * @param yDataList List<Integer> 代表一条曲线的数据  yDataList.size 代表曲线的条数
         * @param lineNames 曲线名称
         * @param colors    曲线颜色
         */
        public void showMultiNormalLineChart(List<List<Float>> yDataList, List<String> lineNames, List<Integer> colors) {
            ArrayList<ILineDataSet> dataSets = new ArrayList<>();
            for (int i = 0; i < yDataList.size(); i++) {
                ArrayList<Entry> entries = new ArrayList<>();
    
                for (int j = 0; j < yDataList.get(i).size(); j++) {
                    entries.add(new Entry(j, yDataList.get(i).get(j)));
                }
                LineDataSet lineDataSet = new LineDataSet(entries, lineNames.get(i));
    //            initLineDataSet(lineDataSet, colors.get(i), LineDataSet.Mode.CUBIC_BEZIER);
                initLineDataSet(lineDataSet, colors.get(i), null);
                dataSets.add(lineDataSet);
            }
            LineData lineData = new LineData(dataSets);
            lineChart.setData(lineData);
            lineChart.animateX(2000);//设置x轴动画渐进
            lineChart.invalidate();
        }
        /**
         * 设置X轴的显示值
         *
         * @param min        x轴最小值
         * @param max        x轴最大值
         * @param labelCount x轴的分割数量
         */
        public void setXAxisData(float min, float max, int labelCount) {
            xAxis.setAxisMinimum(min);
            xAxis.setAxisMaximum(max);
            xAxis.setLabelCount(labelCount, false);
            lineChart.invalidate();
        }
        /**
         * 自定义的 X轴显示内容
         *
         * @param xAxisStr
         * @param labelCount x轴的分割数量
         */
        public void setXAxisData(final List<String> xAxisStr, int labelCount) {
            DecimalFormat df = new DecimalFormat("0.00");
            df.setRoundingMode(RoundingMode.HALF_UP);
            xAxis.setLabelCount(labelCount, false);
            xAxis.setValueFormatter((value, axis) -> {
                    String s = xAxisStr.get((int)value%xAxisStr.size());
                    return df.format(Float.valueOf(s));
            });
            lineChart.invalidate();
        }
        /**
         * 设置Y轴值
         *
         * @param max
         * @param min
         * @param labelCount
         */
        public void setYAxisData(float max, float min, int labelCount) {
            leftYAxis.setAxisMaximum(max);
            leftYAxis.setAxisMinimum(min);
            leftYAxis.setLabelCount(labelCount, false);
    
            rightYAxis.setAxisMaximum(max);
            rightYAxis.setAxisMinimum(min);
            rightYAxis.setLabelCount(labelCount, false);
            lineChart.invalidate();
        }
        /**
         * 自定义的 y轴显示内容
         *
         * @param yAxisStr
         * @param labelCount y轴的分割数量
         */
        public void setYAxisData(final List<String> yAxisStr, int labelCount) {
            leftYAxis.setLabelCount(labelCount, false);
            leftYAxis.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    return yAxisStr.get((int) value % yAxisStr.size());
                }
            });
            lineChart.invalidate();
        }
        /**
         * 设置高限制线
         *
         * @param high
         * @param name
         */
        public void setHighLimitLine(float high, String name, int color) {
            if (name == null) {
                name = "高限制线";
            }
            LimitLine highLimit = new LimitLine(high, name);
            highLimit.setLineWidth(2f);
            highLimit.setTextSize(10f);
            highLimit.setLineColor(color);
            highLimit.setTextColor(color);
            leftYAxis.addLimitLine(highLimit);
            lineChart.invalidate();
        }
        /**
         * 设置低限制线
         *
         * @param low
         * @param name
         */
        public void setLowLimitLine(float low, String name, int color) {
            if (name == null) {
                name = "高限制线";
            }
            LimitLine lowLimit = new LimitLine(low, name);
            lowLimit.setLineWidth(2f);
            lowLimit.setTextSize(10f);
            lowLimit.setLineColor(color);
            lowLimit.setTextColor(color);
            leftYAxis.addLimitLine(lowLimit);
            lineChart.invalidate();
        }
        /**
         * 设置描述信息
         *
         * @param str
         */
        public void setDescription(String str) {
            Description description = new Description();
            description.setText(str);
            lineChart.setDescription(description);
            lineChart.invalidate();
        }
        /**
         * 设置线条填充背景颜色
         *
         * @param drawable
         */
        public void setChartFillDrawable(Drawable drawable) {
            if (lineChart.getData() != null && lineChart.getData().getDataSetCount() > 0) {
                LineDataSet lineDataSet = (LineDataSet) lineChart.getData().getDataSetByIndex(0);
                //避免在 initLineDataSet()方法中 设置了 lineDataSet.setDrawFilled(false); 而无法实现效果
                lineDataSet.setDrawFilled(true);
                lineDataSet.setFillDrawable(drawable);
                lineChart.invalidate();
            }
        }
    }
    

     

    展开全文
  • MPchart 开源图表库jar包
  • MPChart的柱状图BarChart

    千次阅读 2018-12-17 14:22:28
    本教程只限MPChart 3.0以上 官方WIKI教程 虽说官方有教程,但毕竟是老外写的,不如咱中国人写的明白。 首先,xml里写一个barchart我不多说了 然后是准备数据源 int [] data1={1,4,2,3}; int [] data2={3,1,3,6...

    分组柱状图
    本教程只限MPChart 3.0以上
    官方WIKI教程
    虽说官方有教程,但毕竟是老外写的,不如咱中国人写的明白。

    首先,xml里写一个barchart我不多说了
    然后是准备数据源

    int [] data1={1,4,2,3};
    int [] data2={3,1,3,6};
    

    我这里使用了数组。
    接着添加数据

    ArrayList<BarEntry> yvalues1=new ArrayList<>();
            ArrayList<BarEntry> yvalues2=new ArrayList<>();
            for (int k=0;k<data1.length;k++)
            {
                yvalues1.add(new BarEntry(k,data1[k]));
                yvalues2.add(new BarEntry(k,data2[k]));
            }
    

    然后把数据绑定到Bardataset上

     BarDataSet barDataSet1=new BarDataSet(yvalues1,"Group1");
     barDataSet1.setColor(Color.GREEN);
     BarDataSet barDataSet2=new BarDataSet(yvalues2,"Group2");
     barDataSet1.setColor(Color.BLUE);
    

    修改一下颜色好区分开了
    接下来绑定数据,然后设置分组。

            BarData barDatag=new BarData(barDataSet1,barDataSet2);
            barDatag.setBarWidth(柱状图宽度);
            barChart2.setData(barDatag);
            barChart2.groupBars(开始点,两组之间距离,每一个柱状图的距离);
            barChart2.invalidate();
    

    在这里插入图片描述
    groupBars一定要写在setdata后面不然会报错
    groupBars里的数据要带单位f。

    堆叠条形图
    这个感觉很鸡肋,而且效果也不太好
    在这里插入图片描述
    正常BarChart的方法然后修改添加的数据即可

    BarEntry barEntry=new BarEntry(0f,new float[]{10,20,30});
    yvalues.add(barEntry);
    
    展开全文
  • 项目使用了Barchart,柱状图,MP有好几个点击、触摸事件,但是对于每一条柱的点击、触摸事件只有2个:setOnChartValueSelectedListener和setOnTouchListener(barchart的触摸)。默认点击某一条时,弹出框,继承...

空空如也

1 2 3 4 5 ... 15
收藏数 291
精华内容 116
关键字:

mpchart