web-dev-qa-db-ja.com

MPAndroidChart棒グラフ各ラベルの色を変更する方法

MPAndroidChart これは、MPAndroidChartライブラリを使用して作成した棒グラフです。今、私は各ラベルの色を変更する必要があり、インターネットで検索しても解決策を見つけることができません。誰かが私がこの問題を乗り越えるのを手伝ってくれませんか。

6
user2273146

この答えには2つの部分があります。

1)棒グラフの凡例に単一のラベルを含める場合は、すべての棒を1つのデータセットに追加し、メソッドsetColors(int [] colors、Android.content.Context c)を使用して色を割り当てます。各バー。

2)各バーの凡例に異なるラベルを付けたい場合は、チャートに複数のデータセットを含め、各データセットに色を割り当てる必要があります(ラベルの数=データセットの数)。

参照できるように、以下にサンプルコードを含めました。コードの最初のブロックは最初のオプションを表しており、2番目のコードブロックは「replace」というタイトルのコメントの間に置き換えて2番目のオプションを取得できます。

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

2番目のオプション:

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

これがお役に立てば幸いです。他にご不明な点がございましたら、お気軽にお問い合わせください。

9
user6542934

DataSetクラスのsetColors(...)メソッドを使用して色を設定できます。 BaseDataSet javadocs の次のメソッドを参照してください。

したがって、たとえば、グラフの6つのバーを緑、黄、赤、青、灰色、黒に設定するには、次のコードを使用します。

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

それに加えて、次の方法で値ラベルの色を制御できます。

dataSet.setValueTextColors(...);
5
TR4Android