MPAndroidChart条形图如何更改每个标签的颜色

时间:2016-08-10 11:27:46

标签: android mpandroidchart

MPAndroidChart 这是我使用MPAndroidChart库构建的条形图。现在我必须改变每个标签的颜色,我无法通过互联网搜索找到解决方案。任何人都可以帮我解决这个问题。

5 个答案:

答案 0 :(得分:8)

这个答案有两个部分。

1)如果你想在条形图的图例中有一个单一的标签,你可以将所有的条形图添加到一个数据集中,并使用方法setColors(int [] colors,android.content.Context c)来分配每个酒吧的颜色。

2)如果您希望图例中的每个条形图都有不同的标签,则需要在图表中包含多个数据集,并为每个数据集指定颜色(标签数量=数据集数量)。

我在下面提供了示例代码供您参考。初始代码块代表第一个选项,第二个代码块可以替换为标题为“replace”的注释以获取第二个选项。

public class SO extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.androidchart_mp);
    BarChart chart = (BarChart) findViewById(R.id.chart_bar_mp);

    // replace
    ArrayList<BarEntry> entries = new ArrayList<>();
    entries.add(new BarEntry (1, 5));
    entries.add(new BarEntry (3, 7));
    entries.add(new BarEntry (5,3));
    entries.add(new BarEntry (7,4));
    entries.add(new BarEntry (9,1));
    BarDataSet dataset = new BarDataSet(entries, "First");
    dataset.setColors(new int[] {Color.RED, Color.GREEN, Color.GRAY, Color.BLACK, Color.BLUE});
    BarData data = new BarData(dataset);
    chart.setData(data);
    // replace



    // below is simply styling decisions on code that I have)
    YAxis left = chart.getAxisLeft();
    left.setAxisMaxValue(10);//dataset.getYMax()+2);
    left.setAxisMinValue(0);
    chart.getAxisRight().setEnabled(false);
    XAxis bottomAxis = chart.getXAxis();
    bottomAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    bottomAxis.setAxisMinValue(0);

    bottomAxis.setLabelCount(10);
    bottomAxis.setAxisMaxValue(10);
    bottomAxis.setDrawGridLines(false);
    chart.setDrawValueAboveBar(false);
    chart.setDescription("");
    // legend
    Legend legend = chart.getLegend();
    legend.setYOffset(40);
    legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);
    legend.setTextSize(200);
}

第二个选项:

    ArrayList<BarEntry> entries = new ArrayList<>();
    entries.add(new BarEntry (1, 5));
    ArrayList<BarEntry> entries2 = new ArrayList<>();
    entries2.add(new BarEntry (3, 2));
    ArrayList<BarEntry> entries3 = new ArrayList<>();
    entries3.add(new BarEntry (5, 7));
    ArrayList<BarEntry> entries4 = new ArrayList<>();
    entries4.add(new BarEntry (7, 7));
    ArrayList<BarEntry> entries5 = new ArrayList<>();
    entries5.add(new BarEntry (9, 1));
    List<IBarDataSet> bars = new ArrayList<IBarDataSet>();
    BarDataSet dataset = new BarDataSet(entries, "First");
    dataset.setColor(Color.RED);
    bars.add(dataset);
    BarDataSet dataset2 = new BarDataSet(entries2, "Second");
    dataset2.setColor(Color.BLUE);
    bars.add(dataset2);
    BarDataSet dataset3 = new BarDataSet(entries3, "Third");
    dataset3.setColor(Color.GREEN);
    bars.add(dataset3);
    BarDataSet dataset4 = new BarDataSet(entries4, "Fourth");
    dataset4.setColor(Color.GRAY);
    bars.add(dataset4);
    BarDataSet dataset5 = new BarDataSet(entries5, "Fifth");
    dataset5.setColor(Color.BLACK);
    bars.add(dataset5);
    BarData data = new BarData(bars);
    chart.setData(data);

我希望这有帮助,如果您有任何其他问题,请告诉我!

答案 1 :(得分:5)

您可以使用每个setColors(...)类的DataSet方法设置颜色。请参阅BaseDataSet javadocs中的以下方法:

  

因此,例如,要将图表的六个条设置为绿色,黄色,红色,蓝色,灰色和黑色,请使用以下代码:

BarDataSet dataSet = ...
int[] colors = new int[] {Color.GREEN, Color.YELLOW, Color.GREEN, Color.BLUE, Color.GRAY, Color.BLACK};
dataSet.setColors(colors);

除此之外,您还可以使用以下方法控制值标签的颜色:

dataSet.setValueTextColors(...);

答案 2 :(得分:0)

barDataSet.setColors(ColorTemplate.COLORFUL_COLOR)

答案 3 :(得分:0)

对于上面的问题,我似乎有点晚了。但是我遇到了同样的问题,对于那些仍然需要它的人,您可以按照示例进行操作:

val colors = ArrayList<Int>()

            colors.add(Color.rgb(20, 99, 165))
            colors.add(Color.rgb(112, 188, 249))
            colors.add(Color.rgb(112, 122, 122))
            colors.add(Color.rgb(65, 65, 65))

这样做会覆盖默认颜色。

答案 4 :(得分:-1)

使用setColors()setColor()-这两种方法设置图表的颜色。

您可以使用以下默认颜色: ColorTemplate.COLORFUL_COLORS

关注this link,了解如何动态设置颜色。