在 MPAndroidChart 条形图中为条形设置不同的颜色

Posted

技术标签:

【中文标题】在 MPAndroidChart 条形图中为条形设置不同的颜色【英文标题】:Setting different colors to bars in MPAndroidChart Bar Chart 【发布时间】:2018-04-07 10:05:10 【问题描述】:

如何根据 Y 轴的值设置不同条形的颜色? 我正在使用 MPandroidChart 库来制作图表。这是我为制作条形图所做的:

        BarChart barChart = (BarChart) findViewById(R.id.chart);
        BarDataSet dataset = new BarDataSet(entries, "Calorie Level");


        ArrayList<String> labels = new ArrayList<String>();
        labels.add("0");
        labels.add("1");
        labels.add("2");  

        BarData data = new BarData(labels, dataset);
        barChart.setData(data);
        barChart.animateY(2000);

我正在计算以下函数的值。我需要根据下面给出的“delta”值设置每个条的颜色

private void addCalories(int calories, int time)
           totalCals += calories;
            float HBNow = HBE * time / 24;
            float delta = totalCals - HBNow;
            entries.add(new BarEntry(delta, time));
            Log.e("My Activity:", "Delta" + delta + "Time:" + time);
        

【问题讨论】:

【参考方案1】:

你可以创建一个包含你的颜色的数组列表

ArrayList<Integer> colors = new ArrayList<Integer>();

colors.add(ContextCompat.getColor(this, R.color.dodger_blue));
colors.add(ContextCompat.getColor(this, R.color.peach));
colors.add(ContextCompat.getColor(this, R.color.medium_pink_three));
colors.add(ContextCompat.getColor(this, R.color.aqua));
colors.add(ContextCompat.getColor(this, R.color.greeny_blue));
colors.add(ContextCompat.getColor(this, R.color.charcoal));
colors.add(ContextCompat.getColor(this, R.color.charcoal_grey));

然后像这样将此数组设置为您的图表数据集

dataset.setColors(colors);

在您的 addCalories() 函数中,您可以使用自己的逻辑来创建包含您的颜色的数组。计算完所有值后,您可以为数据集设置颜色。

【讨论】:

使用 ContextCompat.getColor(this, R.color.x) 是获取实际颜色的关键。仅添加 R.color.x(没有 ContextCompat)时,仅使用数组中的第一种颜色和高 alpha(不透明度)绘制条形图。有解释吗?【参考方案2】:

试试这个使用barDataSet.setColor(Color.BLUE);方法来设置条的颜色

 ArrayList<BarEntry> valueSet1 = new ArrayList<>();
 BarEntry v1e1 = new BarEntry(8f, 0); // Jan
 valueSet1.add(v1e1);

 BarDataSet barDataSet1 = new BarDataSet(valueSet1, "Views");
 barDataSet1.setColor(Color.BLUE);

 ArrayList<BarDataSet> dataSets  = new ArrayList<>();
 dataSets.add(barDataSet1);

【讨论】:

这只会将颜色应用于单个条形。 @MohammedFarhan 是的,他需要在他的数据集中设置颜色上面的答案只是提示【参考方案3】:

这帮助我为所需的列或部分获得自定义颜色。确保按照添加数据的顺序添加颜色,以便在所需位置获得所需颜色。

    colors.add(ContextCompat.getColor(this, R.color.active));
    colors.add(ContextCompat.getColor(this, R.color.recovered));
    colors.add(ContextCompat.getColor(this, R.color.death));
    dataSet.setColors(colors);

【讨论】:

【参考方案4】:

试试这个

BarDataSet dataset = new BarDataSet(entries, "Calorie Level");
dataset.setColors(ColorTemplate.MATERIAL_COLORS);

【讨论】:

这与四年前的@AskNilesh's answer 基本相同,但细节较少。使用ColorTemplate 而不是Colors 有什么好处?至少解释一下。

以上是关于在 MPAndroidChart 条形图中为条形设置不同的颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android图表库MPAndroidChart——多层级的堆叠条形图

Android图表库MPAndroidChart——条形图的绘制过程过程,隐隐约约我看到了套路

D3浮动条形图中的多色条形图由时间计算确定

Android图表库MPAndroidChart——来点不一样的,正负堆叠条形图

spss如何删除堆积条形图中的某块数据

如何改变条形图中的条形顺序?