Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
351 views
in Technique[技术] by (71.8m points)

android - Is it possible to create a multiple color (stacked) bar chart using MPAndroidChart?

I have below data to represent in chart format using MPAndroidChart library:

Subject Marks       
    Needs Attention Average Outstanding
Hindi    1/5     2/5     2/5
English  2/7     3/7     2/7
Maths    1/3     1/3     1/3
Science  2/7     2/7     3/7
Physics  2/9     4/9     4/9
Sanskrit 3/7     3/5     0 

And I want a chart like below:

a stacked bar chart

The above chart is only sample, I want three colours in each bar (stacked). I have already made a bar chart with separate colors, but can't make such multiple coloured chart. Is it possible in MPAndroidChart?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This is called a "stacked bar chart" and it is possible in MPAndroidChart.

There is an example Activity in the Github repo for MPAndroidChart here generated by the following code:

    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();

    for (int i = 0; i < size + 1; i++) {
        float mult = (size + 1);
        float val1 = (float) (Math.random() * mult) + mult / 3;
        float val2 = (float) (Math.random() * mult) + mult / 3;
        float val3 = (float) (Math.random() * mult) + mult / 3;

        yVals1.add(new BarEntry(
                i,
                new float[]{val1, val2, val3},
                getResources().getDrawable(R.drawable.star)));
    }

    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, "Statistics Vienna 2014");
        set1.setDrawIcons(false);
        set1.setColors(getColors());
        set1.setStackLabels(new String[]{"Births", "Divorces", "Marriages"});

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

        BarData data = new BarData(dataSets);
        data.setValueFormatter(new MyValueFormatter());
        data.setValueTextColor(Color.WHITE);

        mChart.setData(data);
    }

    mChart.setFitBars(true);
    mChart.invalidate();

And the output looks like this:

stacked bar chart


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...