MPAndroidChart_水平条形图的那些事

MPAndroidChart攻略——HorizontalBarChart 的点点滴滴。

MPAndroidChart_折线图的那些事

MPAndroidChart_饼图的那些事

MPAndroidChart_动态柱状图

MPAndroidChart_水平条形图的那些事

MPAndroidChart_并列柱状图,及如何实现点击隐藏掉不需要的条目。

MPAndroidChart_雷达图的那些事及自定义标签颜色

 

 水平条形图?也就是倒起来的柱状图,简单理解可以为,将正常的图表顺时针旋转90度,其x轴,y轴对应关系如下。

简单明了吧,就是打个转而已,好了,现在开始熟悉它的相关方法,其实和柱状图没区别。。。

直接附上代码,相应的注释也在其中,如果有不懂的,可以看我别的文章。有些方法通用就没有必要再演示了。

public class MainActivity extends AppCompatActivity {
    private HorizontalBarChart chart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chart = findViewById(R.id.chart);

        XAxis xAxis = chart.getXAxis();
        //取消x轴横线
        xAxis.setDrawAxisLine(true);
        //取消x轴竖线
        xAxis.setDrawGridLines(false);
        //设置x轴位于底部
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //显示3个标签 (不一定准确,如果要准确显示,请带上true)
        xAxis.setLabelCount(3);
        // x轴最大长度3f (注意自定义标签时,它与BarEntry(x,y),与x的关系)
        xAxis.setAxisMaximum(3);
        // x轴标签字体大小
        xAxis.setTextSize(20f);
        //自定义X轴
        final List<String> list=new ArrayList<>();
        list.add("昨天");
        list.add("今天");
        list.add("明天");
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return  value>2?"":list.get((int) value);
            }
        });

        //在定义y轴的时候,需要两边都进行设置,而不是直接setEnabled禁用。否则将产生数据偶尔不显示的问题
        YAxis left = chart.getAxisLeft();
        left.setAxisMinimum(0);
        left.setDrawGridLines(false);
        left.setDrawAxisLine(false);



        YAxis right = chart.getAxisRight();
        right.setDrawGridLines(false);
        right.setDrawAxisLine(true);
        right.setTextSize(20f);
        right.setLabelCount(11);
        right.setAxisMinimum(0);
        // y轴最大长度100f (注意自定义标签时,它与BarEntry(x,y),与y的关系)
        right.setAxisMaximum(100f);

        //自定义Y轴
        final List<String> listY = new ArrayList<>();
        for (int i = 0; i <= 100; i += 10) {
            listY.add(i + "%");
        }
        right.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return value>100?"":listY.get((int) value/10);
            }
        });


        //将图表底部向上偏移10f
        chart.setExtraBottomOffset(10);
        //将图表右边靠左偏移10f
        chart.setExtraRightOffset(10);
        //禁用描述
        chart.getDescription().setEnabled(false);
        //禁用图例
        chart.getLegend().setEnabled(false);

        //随机3个数
        setData(3);
    }

    private void setData(int postion) {
        List<BarEntry> list = new ArrayList<>();
        for (int i = 0; i < postion; i++) {
            list.add(new BarEntry(i, (float) (Math.random() * 101)));
        }

        BarDataSet set = new BarDataSet(list, "");
        //取消显示标签
        set.setDrawValues(false);
        //设置多种颜色,如果x长度大于颜色个数,将随机赋予颜色
        set.setColors(Color.RED,Color.BLACK,Color.BLUE);
        BarData data = new BarData(set);
        //设置轴的宽度
        data.setBarWidth(0.4f);
        chart.setData(data);
        chart.invalidate();
    }

}

最后,再说一下自定义x,y轴时需要注意的:

注意我上面代码里设置 x轴,y轴最大长度时的注释,与 BarEntry(x,y)  中的x,y密切相关。

一般情况下我们无需特意去设置 x,y轴的标签,但有时候的需求需要这几个值自定义并且不变,就像上面Demo里的百分比一样。

先说一下 setLabelCount这个方法,它设置的是显示的标签数。但是并不一定准确

setAxisMaximum 它与x的大小有关,MPandroidchart 在 将数据添加到图表中时,因为x不固定大小,所以在每次绘制时,会以最大的x值和标签的个数来规定标签的显示,及就是value从0开始增加,执行标签个数次。同理y轴也是一样的。

如图:

 

 

所以我们如果要自定义x轴或者y轴时,一定要注意 x轴或y轴的最大长度,配合设置标签数才可以更加得心应手。

 

3.12补充

今天使用的时候发现了一个问题,我的y轴数据为啥偶尔不显示了?

原因是因为有一方的最小y轴长度没有设置,在使用别的图时,我们直接setEnabled禁用即可。但是在水平图里面,这样是千万不行的。

原因是因为,水平图表 需要你的两条y轴确定一个点来定位,但是我们一般只对一个轴进行设置,所以就会产生数据点不显示的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MPAndroidChart是一款开源的Android图表库,可以用于创建各种类型的图表,其中包括条形图。 使用MPAndroidChart创建条形图需要以下几个步骤: 1. 添加依赖:首先,在项目的`build.gradle`文件中添加以下依赖: ``` implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' ``` 2. 创建布局:在布局文件中添加`BarChart`控件,并设置其属性,例如宽高、内边距等。 3. 初始化图表:在Java代码中,通过`findViewById`方法获取到`BarChart`对象,并进行一些初始化设置,例如设置描述文字、是否可缩放等。 4. 准备数据:创建`ArrayList`对象来存储条形图的数据,并为每个条形图设置一个`BarEntry`对象,其中包括条形的数值和位置。 5. 创建数据集:使用`BarDataSet`类创建一个数据集,并将之前准备好的数据添加到数据集中。 6. 创建条形图:使用`BarData`类将数据集添加到`BarChart`对象中,然后调用`invalidate`方法刷新图表。 7. 自定义样式:可以根据需要调整条形的颜色、宽度、高度等样式。 8. 添加交互功能:可以为条形图添加点击件、滑动件等交互功能。 MPAndroidChart提供了丰富的API,可以在创建条形图时灵活控制各种样式和行为。同时,它还支持多语言、友好的开发者社区以及详细的文档解释和示例代码,使得使用和学习变得更加容易。无论是展示数据还是进行数据分析,MPAndroidChart条形图都是一个强大且易用的选择。 ### 回答2: MPAndroidChart是一个功能强大的Android图表库,其中包括了很多种类型的图表,包括条形图条形图是一种常用的统计图表,用于展示各个类别之间的比较或者随时间的变化。 在使用MPAndroidChart绘制条形图之前,首先需要添加依赖库并将其引入到项目中。可以在build.gradle文件中添加以下依赖: ``` implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' ``` 接下来就可以开始绘制条形图了。首先创建一个BarChart对象,并将其添加到布局中: ```java BarChart barChart = findViewById(R.id.bar_chart); ``` 然后创建一个BarDataSet对象,并将数据添加到其中。BarDataSet表示条形图中的一组数据: ```java ArrayList<BarEntry> entries = new ArrayList<>(); entries.add(new BarEntry(1, 50)); // 添加第一条数据,值为50 entries.add(new BarEntry(2, 70)); // 添加第二条数据,值为70 ... BarDataSet dataSet = new BarDataSet(entries, "数据集"); ``` 接下来可以对BarDataSet进行一些设置,例如设置柱形颜色、图例标签等: ```java dataSet.setColor(Color.BLUE); // 设置柱形颜色为蓝色 dataSet.setDrawValues(true); // 设置是否显示柱形上方的数值 ... ``` 然后创建一个BarData对象,并将BarDataSet添加到其中。BarData表示整个条形图的数据: ```java BarData barData = new BarData(dataSet); ``` 最后将BarData设置给BarChart,并进行一些其他的设置,例如设置X轴标签、Y轴标签、图表描述等: ```java barChart.setData(barData); barChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(new String[]{"标签1", "标签2", ...})); // 设置X轴标签 barChart.getAxisLeft().setValueFormatter(new PercentFormatter()); // 设置Y轴标签格式为百分比 ... ``` 通过以上步骤,就可以在Android应用中绘制条形图了。MPAndroidChart还提供了丰富的功能和样式设置,例如设置动画效果、点击件、滑动手势等。详细的用法可以参考MPAndroidChart官方文档。 ### 回答3: MPAndroidChart(或简称为MPChart)是一个强大的Android图表库,用于绘制各种类型的图表,其中包括条形图条形图在数据可视化中非常常见,它使用矩形的长度代表数据的大小,可以直观地比较不同数据之间的差异。要使用MPAndroidChart绘制条形图,首先需要在项目中引入该库。 在绘制条形图之前,我们需要准备好相关的数据。可以通过创建一个BarDataSet对象,并向其添加数据条目。每个数据条目都需要指定它的值,以及显示在X轴上的位置。 创建BarData对象时,需要将之前创建的数据集传递给它。然后,我们可以通过调用Chart对象的setData()方法,将BarData对象设置为图表的数据源。 接下来,可以对条形图的样式进行一些自定义。我们可以设置条形的颜色、边框颜色、字体大小等。可以使用Chart对象的各种方法来实现这些自定义设置。 最后,我们要将Chart对象添加到布局中,以便在用户界面上显示条形图。可以在XML布局文件中使用Chart对象的自定义视图(如BarChart)来定义图表的位置和大小,也可以在Java代码中使用Chart对象的实例化类(如BarChart)来实现。 总之,使用MPAndroidChart绘制条形图非常简单和灵活。我们只需要准备数据、设置样式并将Chart对象添加到布局中就可以实现一个漂亮的条形图。该库还提供了很多其他功能和交互性,可以根据需求进行进一步探索和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

petterp

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

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

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

打赏作者

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

抵扣说明:

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

余额充值