Android图表库MPAndroidChart条形图X轴显示文字或日期。

ps:因为公司的业务需求,需要对于复杂数据的图形显示简化,所以开始接触MPAndroid
git上官网的例子是这样的:在这里插入图片描述
我想实现的效果是这样的:
在这里插入图片描述
最左边显示日期或文字

心理路程:我想实现的效果是左边的x轴显示日期,但是根据我好长时间的尝试以及百度也没有明确的答案
解决方案 :
在build.gradle中导入:compile ‘com.github.PhilJay:MPAndroidChart:v3.0.0’
3.1版本以后的 IAxisValueFormatter这个接口不支持
主要实现的代码:

protected BarChart mChart;
      private int sCount = 31; //X轴坐标数据数量

       private ArrayList<String> data; //保存X轴坐标数据

          @Override
 protected void onCreate(Bundle savedInstanceState)
 {
super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_second);


mChart = findViewById(R.id.bc_re);

mChart.setDrawBarShadow(false);
mChart.setDrawValueAboveBar(true);
//mChart.setContentDescription("××表");
 mChart.getDescription().setEnabled(false);
 mChart.setNoDataText("666");
 mChart.setPinchZoom(false); //scaling can now only be done on x- and y-axis separately
mChart.setDrawGridBackground(false);
 mChart.getAxisRight().setEnabled(false); //不绘制右侧轴线

 data = new ArrayList<>();
 for(int i = 0; i<sCount ; i++)
 {
data.add("2019-08-"+(i+1));
 }

 XAxis xl = mChart.getXAxis();
 xl.setValueFormatter(new IAxisValueFormatter() {
  @Override
  public String getFormattedValue(float value, AxisBase axis) {
   return String.valueOf(data.get((int) value));
  }

  @Override
  public int getDecimalDigits() {
   return 0;
  }
 });
 xl.setPosition(XAxis.XAxisPosition.BOTTOM);
//xl.setLabelRotationAngle(45);  //标签倾斜
 xl.setDrawAxisLine(true);
xl.setDrawGridLines(false);
 xl.setCenterAxisLabels(false); //可不加这句,默认为false
//xl.setGranularity(sCount);  //x轴坐标占的宽度
 xl.setGranularity(1f); //x轴坐标占的宽度
//xl.setCenterAxisLabels(true);
 xl.setAxisMinimum(-0.5f); // 此轴显示的最小值
 //xl.setAxisMaximum(sCount*sCount);  // 此轴显示的最大值
 xl.setLabelCount(sCount); //显示的坐标数量

YAxis yl = mChart.getAxisLeft();
 yl.setDrawAxisLine(true);
 yl.setDrawGridLines(true);
yl.setAxisMinimum(0f);//this replaces setStartAtZero(true)

 float[] val = {25000000, 29000000 , 21000000, 22000000, 20000000, 26000000, 22000000, 20000000, 28000000, 29000000, 29000000, 24003200,26003200, 26003200 , 26003200, 26003200, 26003200, 26003200, 26003200, 26003200, 26003200, 26003200, 26003200, 26003200,26003200,26003200,26003200,26003200,26003200,26003200,26003200};
 setData(sCount, val);
 mChart.setFitBars(true);
 mChart.animateXY(2000, 2000);

Legend legend = mChart.getLegend();
legend.setEnabled(false); //不显示图例
 }

 private void setData(int count, float[] val)
 {
 //float barWidth = count-1;    //每个彩色数据条的宽度
 //float spaceForBar = count;   //每个数据条实际占的宽度
 float barWidth = 0.8f; //每个彩色数据条的宽度
     float spaceForBar = 1f; //每个数据条实际占的宽度
 ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();

 for (int i = 0; i < count; i++)
{
 //float val = (float) (Math.random() * range);
yVals1.add(new BarEntry(i * spaceForBar, val[i],
          getResources().getDrawable(R.drawable.ic_launcher_background)));
 }

 BarDataSet set1;

 if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0)
 {
set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0);
set1.setValues(yVals1);
 mChart.getData().notifyDataChanged();
 mChart.notifyDataSetChanged();
 }
 else
{
 set1 = new BarDataSet(yVals1, "sss");



 ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
 dataSets.add(set1);

 BarData data = new BarData(dataSets);
data.setValueTextSize(10f);
data.setBarWidth(barWidth);
mChart.setData(data);
}
 }

xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity">

    <com.github.mikephil.charting.charts.HorizontalBarChart
        android:id="@+id/bc_re"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>

这就是完整的项目 因为内容就这一个activity 所以也就不上传git了 。。。。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

安东尼肉店

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

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

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

打赏作者

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

抵扣说明:

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

余额充值