java - Android:用 `MPAndroidChart`绘制水平条形图

标签 java android bar-chart mpandroidchart

我正在尝试使用 MPAndroidChart 在 android 中绘制水平条形图.请检查以下代码。

activity_mail.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.graphs.graphs2.MainActivity">



    <com.github.mikephil.charting.charts.HorizontalBarChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

MainActivity.java

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.github.mikephil.charting.charts.HorizontalBarChart;
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.utils.ColorTemplate;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

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

        HorizontalBarChart chart = (HorizontalBarChart) findViewById(R.id.chart);

        BarData data = new BarData(getDataSet());
        chart.setData(data);
        chart.animateXY(2000, 2000);
        chart.invalidate();
    }

    private BarDataSet getDataSet() {

        ArrayList<BarEntry> entries = new ArrayList();
                entries.add(new BarEntry(4f, 0));
                entries.add(new BarEntry(8f, 1));
                entries.add(new BarEntry(6f, 2));
                entries.add(new BarEntry(12f, 3));
                entries.add(new BarEntry(18f, 4));
                entries.add(new BarEntry(9f, 5));

        BarDataSet dataset = new BarDataSet(entries,"hi");
        return dataset;
    }

    private ArrayList<String> getXAxisValues() {
        ArrayList<String> labels = new ArrayList();
                labels.add("January");
                labels.add("February");
                labels.add("March");
                labels.add("April");
                labels.add("May");
                labels.add("June");
        return labels;
    }


}

这给了我下面的图表。 enter image description here

但是,我想要的条形图如下... enter image description here

所以我需要做一些事情......

  1. 给条形图上色
  2. 移除引导线
  3. 在其左侧显示每个栏的描述
  4. 在条的末尾显示带有数字的“%”标记(例如:对于第一个条,显示 4% 而不是 4)

我也访问了这篇文章,图书馆的作者似乎已经完成了我要求的一些工作,所以这个图书馆可能是可能的。我该怎么做?

最佳答案

为条形着色:

BarDataSet#setColor(List<Integer>)

移除网格线:

chart.getXAxis().setDrawGridLines(false);
chart.getLeftAxis().setDrawGridLines(false);

显示说明:

给图表单独添加一个 TextView

将 % 添加到值中:

xAxis.setValueFormatter(new IAxisValueFormatter() {
    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return (int) Math.floor(value) + "%";
    }

});

关于java - Android:用 `MPAndroidChart`绘制水平条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564371/

相关文章:

java - 是否可以将请求从 WebServlet 转发到休息助手 servlet (javax.ws.rs.core.Application)

java - 表示层(wicket)和业务逻辑(spring)通信的最佳实践

android - apache cordova 应用程序在收到 parse.com 推送通知后崩溃

javascript - D3.js 从 json 更新条形图

java - @Size 注释不修剪空格

java - 并行化 for 循环并填充多个数据结构

java - 从 recyclerview 中的 editText 进行搜索,我使用改造从 API 获取项目

Android缩小相机图片的大小

python - 如何增加子图文本大小并添加自定义条形图注释

javascript - D3.js 条形图不刷新