使用 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
的上下文中有意义。因此,与 BarChart
和 LineChart
不同,一个 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
映射到颜色的函数,而不是手动执行。
无论如何, 设置饼图切片的颜色是正确的。
在我的应用程序中,我想在饼图上显示一些数据。我正在使用 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
的上下文中有意义。因此,与 BarChart
和 LineChart
不同,一个 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
映射到颜色的函数,而不是手动执行。
无论如何,