MPAndroidChart直方图(BarChart),渐变,左右滑动

上一篇单个直方图
上一篇多组直方图

先来看一下效果

单个直方图
分组直方图

  • 设置基础属性
//设置每个直方图阴影为false
mBarChart.setDrawBarShadow(false);
//这里设置为true每一个直方图的值就会显示在直方图的顶部
mBarChart.setDrawValueAboveBar(false);
//设置描述不显示
mBarChart.getDescription().setEnabled(false);
mBarChart.setPinchZoom(false);
//设置不显示网格
mBarChart.setDrawGridBackground(false);
//设置图表的背景颜色
mBarChart.setBackgroundColor(ColorAndImgUtils.CHART_BACKGROUND_COLOR);
//手机屏幕上显示6剩下的滑动直方图然后显示
float ratio = (float) xValueList.size()/(float) 7;
//显示的时候是按照多大的比率缩放显示,1f表示不放大缩小
mBarChart.zoom(ratio,1f,0,0);
//从Y轴弹出的动画时间
mBarChart.animateY(1500);
//设置是否可以缩放
mBarChart.setScaleEnabled(false);
//设置是否可以触摸
mBarChart.setTouchEnabled(true);
//设置是否可以拖拽
mBarChart.setDragEnabled(true);
  • 设置图例
//获取图例对象
Legend legend = mBarChart.getLegend();
//设置图例不显示
legend.setEnabled(false);
  • 设置X轴
//自定义设置横坐标
IAxisValueFormatter xValueFormatter = new FastBrowserXValueFormatter(xValueList);
//设置不显示网格线,保留水平线
XAxis xAxis = mBarChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawAxisLine(false);
xAxis.setDrawGridLines(false);
xAxis.setGridColor(ColorAndImgUtils.GRID_COLOR);
xAxis.setGridLineWidth(1);
//设置为true当一个页面显示条目过多,X轴值隔一个显示一个
xAxis.setGranularityEnabled(true);
//设置最小间隔,防止当放大时,出现重复标签。
xAxis.setGranularity(1f);
//一个界面显示6个Lable。那么这里要设置7个
xAxis.setLabelCount(7);
//将自定义的横坐标设置上去
xAxis.setValueFormatter(xValueFormatter);
//设置X轴字体显示角度
xAxis.setLabelRotationAngle(45f);
xAxis.setTextSize(10f);
xAxis.setTextColor(ColorAndImgUtils.FAST_BW_TEXT_COLOR);
  • 设置Y轴
//左边Y轴
YAxis leftYAxis = mBarChart.getAxisLeft();
//设置从Y轴左侧发出横线
leftYAxis.setDrawGridLines(true);
//设置网格线的颜色
leftYAxis.setGridColor(ColorAndImgUtils.GRID_COLOR);
leftYAxis.setGridLineWidth(1);
leftYAxis.setAxisMinimum(0f);
//设置显示左边Y坐标
leftYAxis.setEnabled(true);
leftYAxis.setTextSize(12f);
leftYAxis.setTextColor(ColorAndImgUtils.FAST_BW_TEXT_COLOR);
//设置Y轴的颜色
leftYAxis.setAxisLineColor(ColorAndImgUtils.GRID_COLOR);
//设置Y轴的宽度
leftYAxis.setAxisLineWidth(1f);
//如果沿着轴线的线应该被绘制,则将其设置为true,显示隐藏Y轴
leftYAxis.setDrawAxisLine(false);
//右边Y轴
YAxis rightYAxis = mBarChart.getAxisRight();
//设置隐藏右边y坐标
rightYAxis.setEnabled(false);
  • 设置MarkView
CustomMarkView mv = new CustomMarkView(getActivity(), R.layout.bar_chart_custom_marker_view);
// For bounds control
mv.setChartView(mBarChart);
// Set the marker to the chart
mBarChart.setMarker(mv);
  • 设置值
private void setData(ArrayList<String> xValueList, ArrayList<Integer> yValueList) {
        ArrayList<BarEntry> yValues = new ArrayList<>();
        for(int i=0;i<xValueList.size();i++){
            yValues.add(new BarEntry(i,yValueList.get(i)));
        }
        BarDataSet set;
        if(mBarChart.getData()!=null && mBarChart.getData().getDataSetCount()>0){
            set = (BarDataSet) mBarChart.getData().getDataSetByIndex(0);
            set.setValues(yValues);
            mBarChart.getData().notifyDataChanged();
            mBarChart.notifyDataSetChanged();
        }else{
            set = new BarDataSet(yValues,"");
            //设置直方图上面时候显示图标
            set.setDrawIcons(false);
            //设置点击之后显示的颜色
            set.setHighLightColor(ColorAndImgUtils.HIGH_LIGHT_COLOR);
            //设置颜色
            set.setColors(ColorAndImgUtils.ONE_COLOR,ColorAndImgUtils.BASE_COLOR_TWO);
            ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
            dataSets.add(set);

            BarData data = new BarData(dataSets);
            //设置顶部值是否显示
            data.setDrawValues(false);
            //默认是0.85f
            data.setBarWidth(0.6f);

            mBarChart.setData(data);
            mBarChart.invalidate();
        }
    }
展示结果

这里写图片描述

分组的直方图,区别也是数据设置那里的问题
private void setData(ArrayList<String> xValueList, ArrayList<ArrayList<Integer>> yValueList) {
        float groupSpace = 0.12f; //柱状图组之间的间距
        float barSpace = (float) ((1 - 0.12) / yValueList.size() / 10); // x4 DataSet
        //按照这个公式来计算
        float barWidth = (float) ((1 - 0.12) / yValueList.size() / 10 * 9); // x4 DataSet
        // (barWidth + barSpace)*4 + groupSpace = 1.00 -> interval per "group"
        int startYear = 0;
        ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
        for(int i=0;i<yValueList.size();i++){
            ArrayList<BarEntry> yValues = new ArrayList<>();
            for(int j=0;j<xValueList.size();j++){
                yValues.add(new BarEntry(j,yValueList.get(i).get(j)));
            }
            BarDataSet set = new BarDataSet(yValues,nameList.get(i));
            set.setDrawIcons(false);//设置直方图上面时候显示图标
            //set.setColor(mColors[i%mColors.length]);
            set.setColors(ColorAndImgUtils.ALL_COLORS[i%ColorAndImgUtils.ALL_COLORS.length], ColorAndImgUtils.BASE_COLOR_TWO);
            set.setHighLightColor(ColorAndImgUtils.HIGH_LIGHT_COLOR);//设置点击之后显示的颜色
            dataSets.add(set);
        }
        BarData data = new BarData(dataSets);
        data.setValueFormatter(new LargeValueFormatter());
        //data.setValueTextSize(10f);//设置直方图上面文字的大小
        //data.setBarWidth(0.9f);//设置直方图的宽度
        //data.setValueTextColor(Color.WHITE);
        data.setBarWidth(barWidth);//直方图的宽度
        data.setDrawValues(false);//设置直方图顶部值的显示与隐藏
        mBarChart.setData(data);

        mBarChart.getBarData().setBarWidth(barWidth);
        // restrict the x-axis range
        mBarChart.getXAxis().setAxisMinimum(startYear);
        // barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters
        mBarChart.getXAxis().setAxisMaximum(startYear + mBarChart.getBarData().getGroupWidth(groupSpace, barSpace) * xValueList.size());
        //起始点、直方图组间距、直方图之间的间距
        mBarChart.groupBars(startYear, groupSpace, barSpace);
        mBarChart.invalidate();

    }
分组直方图的展示结果

这里写图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
在Matlab中,可以使用bar函数来绘制直方图。bar函数的格式为:bar(horz,v,width),其中horz是直方图的横坐标,v是直方图的纵坐标,width是每个直方的宽度。例如,可以使用以下代码来绘制直方图: ``` horz = 1:10:256; h1 = \[3, 5, 2, 7, 4, 6, 1, 8, 3, 5\]; bar(horz, h1); ``` 这段代码将绘制一个直方图,横坐标为1到256,纵坐标为h1的值。每个直方的宽度默认为0.8。 如果要将多张直方图分别绘制在一张figure上,可以使用subplot函数。例如,可以使用以下代码来绘制两张直方图: ``` y1 = \[3, 3, 1\]; y2 = \[3, 3, 4\]; y3 = \[1, 2, 6\]; subplot(3, 1, 1); bar(y1, 0.5); subplot(3, 1, 2); bar(y2, 0.5, 'grouped'); subplot(3, 1, 3); bar(y3, 0.7, 'grouped'); ``` 这段代码将在一张figure上绘制三个子图,分别显示y1、y2和y3的直方图。每个直方的宽度分别为0.5和0.7,并使用'grouped'参数将直方图分组显示。 希望这个回答对你有帮助!\[1\]\[2\] #### 引用[.reference_title] - *1* [matlab中直方图的绘制方法](https://blog.csdn.net/u011202336/article/details/9172153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Matlab 绘制直方图、面积图、饼图、针状图](https://blog.csdn.net/zhangkaikai36/article/details/123280989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃骨头不吐股骨头皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值