【问题标题】:Setting different colors to bars in MPAndroidChart Bar Chart在 MPAndroidChart 条形图中为条形设置不同的颜色
【发布时间】: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);
        }

【问题讨论】:

    标签: android mpandroidchart


    【解决方案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 有什么好处?至少解释一下。
      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多