【问题标题】:MPAndroidChart bar chart how to change color of each labelMPAndroidChart条形图如何改变每个标签的颜色
【发布时间】:2016-12-16 18:22:11
【问题描述】:

这是我使用 MPAndroidChart 库构建的条形图。现在我必须更改每个标签的颜色,我通过互联网搜索找不到解决方案。

【问题讨论】:

  • 您正在使用哪个标签?
  • 我说的是彩条标签。在这张图片中有四种不同颜色的四个条。
  • mChart.setHoleColor(Color.WHITE);试试这个
  • setHoleColor 该函数甚至在我一直使用的库版本中不存在 'com.github.PhilJay:MPAndroidChart:v2.2.4'。

标签: android mpandroidchart


【解决方案1】:

这个答案有两个部分。

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

2) 如果您想在每个条形图的图例中使用不同的标签,则需要在图表中包含多个数据集并为每个数据集分配颜色(标签数 = 数据集数)。

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

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);

希望对你有帮助,如果有其他问题,请告诉我!

【讨论】:

  • 感谢它的工作。我是这个图书馆的新手,所以如果有什么我在探索它时无法解决的问题,我会告诉你。
  • 我在每个条目的第 0 个索引处添加值。您的答案对不同条目的不同索引帮助了我
【解决方案2】:

您可以使用每个DataSet 类的setColors(...) 方法设置颜色。请参阅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(...);

【讨论】:

【解决方案3】:
barDataSet.setColors(ColorTemplate.COLORFUL_COLOR)

【讨论】:

    【解决方案4】:

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

    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))
    

    这样做会覆盖默认颜色。

    【讨论】:

      【解决方案5】:

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

      你有默认颜色使用: ColorTemplate.COLORFUL_COLORS

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-25
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 2020-03-22
        • 1970-01-01
        • 2019-10-02
        • 1970-01-01
        相关资源
        最近更新 更多