在 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——条形图的绘制过程过程,隐隐约约我看到了套路