android MPDroidChart:如何创建分组BarChart?

2nc8po8w  于 2023-05-12  发布在  Android
关注(0)|答案(4)|浏览(223)

我正在使用MPAndroidChart创建分组数据集,但在这一行显示错误BarData data = new BarData(labels,dataSets );,即Unable to resolve constructor,BarData(java.util.ArrayList)<java.lang.String>,java.util.ArrayList<com.github.mikephil.charting.data.BarDataSet;>我还转换了IBarDataSet,然后应用程序得到Unfortunately Stopped。我使用了依赖compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'。来人啊救救我!!

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

            // create BarEntry for group 2
            ArrayList<BarEntry> group2 = new ArrayList<>();
            group2.add(new BarEntry(6f, 0));
            group2.add(new BarEntry(7f, 1));
            group2.add(new BarEntry(8f, 2));
            group2.add(new BarEntry(12f, 3));
            group2.add(new BarEntry(15f, 4));
            group2.add(new BarEntry(10f, 5));

            // creating dataset for group1
            BarDataSet barDataSet1 = new BarDataSet(group1, "Brand 1");
            barDataSet1.setColors(ColorTemplate.COLORFUL_COLORS);

            // creating dataset for group2
            BarDataSet barDataSet2 = new BarDataSet(group2, "Brand 2");
            barDataSet2.setColors(ColorTemplate.COLORFUL_COLORS);

            // combined all dataset into an arraylist
            ArrayList<BarDataSet> dataSets = new ArrayList<>();
            dataSets.add(barDataSet1);
            dataSets.add(barDataSet2);

            ArrayList<String> labels = new ArrayList<>();
            labels.add("JAN");
            labels.add("FEB");
            labels.add("MAR");
            labels.add("APR");
            labels.add("MAY");
            labels.add("JUN");
            BarData data = new BarData(labels,dataSets );// initialize the Bardata with argument labels and dataSet
            barChartGroup.setData(data);

我想像下面的例子一样获取数据集:-

谢谢!

jjhzyzn0

jjhzyzn01#

由于版本v3.0.0带来了与分组BarChart的绘制相关的重大更改,因此您应该修改依赖项以获得最新版本。
那么,如何为数据组定义BarData呢?根据官方Wiki的example for "Grouped BarChart",您可以这样做:

BarData data = new BarData(barDataSet1, barDataSet2 );
barChartGroup.setData(data);

该示例还示出了如何设置条宽度和条/条组之间的间隙。
顺便说一下,MPandroidChart依赖于你的条目被排序。未排序的列表可能会也可能不会正确绘制。除此之外,至少在示例中,两组条目具有相同的x值集合,因此填充缺失值可能是一个好主意。
关于标签:好像现在还不能像你这样设置标签。有关在x轴上使用自定义ValueFormatter的解决方法,请参阅SO post by TR4Android

wr98u20j

wr98u20j2#

这是一个完整代码

private BarData generateBarData() {

    ArrayList<BarEntry> entries1 = new ArrayList<>();
    ArrayList<BarEntry> entries2 = new ArrayList<>();

    for (int index = 0; index < count; index++) {
        entries1.add(new BarEntry(0, getRandom(25, 25)//your data));

        // stacked
        entries2.add(new BarEntry(0, new float[]{getRandom(13, 12)//your data, getRandom(13, 12)//your data}));
    }

    BarDataSet set1 = new BarDataSet(entries1, "Bar 1");
    set1.setColor(Color.rgb(60, 220, 78));
    set1.setValueTextColor(Color.rgb(60, 220, 78));
    set1.setValueTextSize(10f);
    set1.setAxisDependency(YAxis.AxisDependency.LEFT);

    BarDataSet set2 = new BarDataSet(entries2, "");
    set2.setStackLabels(new String[]{"Stack 1", "Stack 2"});
    set2.setColors(Color.rgb(61, 165, 255), Color.rgb(23, 197, 255));
    set2.setValueTextColor(Color.rgb(61, 165, 255));
    set2.setValueTextSize(10f);
    set2.setAxisDependency(YAxis.AxisDependency.LEFT);

    float groupSpace = 0.06f;
    float barSpace = 0.02f; // x2 dataset
    float barWidth = 0.45f; // x2 dataset
    // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group"

    BarData d = new BarData(set1, set2);
    d.setBarWidth(barWidth);

    // make this BarData object grouped
    d.groupBars(0, groupSpace, barSpace); // start at x = 0

    return d;
}

信用https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/CombinedChartActivity.java

e3bfsja2

e3bfsja23#

这里有一个很好的例子here,看看吧。
以下是生成的分组BarChart

js5cn81o

js5cn81o4#

在您的情况下,您有两个品牌{品牌1,品牌2 },MPANDROID图表支持绘图栏明确gouped。
1.在本例中,必须创建两个listbarEntries来组装数据,两个BarDataSet如下所示表示每个组:BarDataSet barDataSet 1 =new barDataSet(listbarEntries 1,“Brand 1”)BarDataSet barDataSet 2 =new BarDataSet(listbarEntries 2,“Brand 2”)之后,您可以将barDataSet添加到BarChart。
示例:

BarDataSet barDataSet1 = new BarDataSet(listbarEntries1, "Brand 1");
BarDataSet barDataSet2 = new BarDataSet(listbarEntries2, "Brand 2");
float groupSpace = 0.1f;
float Space = 0.06f; 
float Width = 0.50f; 

BarData data = new BarData(barDataSet1, barDataSet2);
data.setBarWidth(Width); 
barChart.setData(data);
barChart.groupBars(0f, Space, barSpace); 
barChart.invalidate(); // refresh

相关问题