使用 MPAndroidChart 饼图显示不同的数据集

Show different datasets with an MPAndroidChart pie chart

在我的应用程序中,我想在饼图上显示一些数据。我正在使用 MPAndroidChart 库并按照文档编写了一个漂亮的图表,并正确显示了我的所有数据。

现在,我想改进我的图表,但我遇到了一些麻烦。我的数据指的是一天,但有两类:收入和收入。到目前为止,我一直将它们作为单个 PieDataSet 来处理(它们有标签,因此很容易区分它们)。现在我想区分收入和收入,在同一个饼图中用不同的颜色显示它们。

我尝试按照 this link(折线图部分)将其调整为饼图,但 Android Studio 告诉我我不能使用 List<IPieDataSet> 作为 PieData 对象构造函数的参数。这是代码:

public static void drawPie( List<PieEntry> entriesU, List<PieEntry>entriesE, PieChart chart){
    PieDataSet set = new PieDataSet(entriesU,"uscite");
    PieDataSet set1 = new PieDataSet(entriesE,"entrate");
    List<IPieDataSet> dataSets = new ArrayList<>();
    dataSets.add(set);
    dataSets.add(set1);
    set.setSliceSpace(5);
    set1.setSliceSpace(5);
    PieData data = new PieData(dataSets);
    chart.setData(data);
}

我已经搜索了很多,但我仍然没有找到这个问题的答案。

问题:

是否可以在同一个饼图上显示多个数据集?如果可能的话,我该怎么做?

A pie-chart 是一个 360 度圆,其中切片表示给定数据集总数的百分比。这仅在单个 IDataSet 的上下文中有意义。因此,与 BarChartLineChart 不同,一个 PieChart 不支持多个 IDataSet

我认为您真正想要的是为 "incomes" 和 "revenues" 使用不同的颜色。为此,您需要做的就是创建一个 List<Integer> 已解析颜色(不是颜色资源),其中列表中的位置与 PieEntry 添加到图表中的顺序相匹配。

为了说明,假设我们有这个:

entries.add(new PieEntry(15f, "entrate1")); //revenue1
entries.add(new PieEntry(20f, "uscite1")); //expense1
entries.add(new PieEntry(10f, "entrate2")); //revenue2
entries.add(new PieEntry(50f, "uscite2")); //expense2

您只需创建一个 List<Integer> 的解析颜色匹配:

List<Integer> colors = new ArrayList<Integer>();
colors.add(ContextCompat.getColor(context, R.color.red));
colors.add(ContextCompat.getColor(context, R.color.blue));
colors.add(ContextCompat.getColor(context, R.color.red));
colors.add(ContextCompat.getColor(context, R.color.blue));
dataSet.setColors(colors);

现在你所有的收入都是红色的,你的支出是蓝色的。您甚至可以聪明地编写一个将 PieEntry 映射到颜色的函数,而不是手动执行。

无论如何, 设置饼图切片的颜色是正确的。