web-dev-qa-db-ja.com

MPAndroidChartでx軸ラベルを設定する方法

私のアプリには、次のようにMPAndroidChartを使用します。

enter image description here

しかし、私はそのようなタグを追加することはできません

11
kemp

それらのvaluesの代わりにtagが必要ですか?

もしそうなら、ここでそれを行う方法に行きます。

XAxisラベルをArrayListに追加します

    final ArrayList<String> xLabel = new ArrayList<>();
    xLabel.add("9");
    xLabel.add("15");
    xLabel.add("21");
    xLabel.add("27");
    xLabel.add("33");  

    // or use some other logic to save your data in list. For ex. 
    for(i=1; i<50; i+=2)
    { 
       xLabel.add(""+3*i);
    }

次に、setValueFormatterでこのラベルを使用します。
Ex

    XAxis xAxis = mChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setDrawGridLines(false);
    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return xLabel.get((int)value);
        }
    });

結果

enter image description here

25
Prabs

AxisValueFormatterをオーバーライドできます

すなわち:

xAxis.setValueFormatter(new AxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return "YOUR_TEXT"; // here you can map your values or pass it as empty string
            }

            @Override
            public int getDecimalDigits() {
                return 0; //show only integer
            }
        });

グループの中心値を選択してグループ名をマッピングできますが、他は空です。それが最も簡単な方法です。

2
Maher Abuthraa

この問題の別の解決策を見つけました。これらのパラメータを追加してみてください

float groupSpace = 0.06f;
float barSpace = 0.02f;
mChart.setData(data);
mChart.groupBars(0f, groupSpace, barSpace);
0
Ghizlane Lotfi

このバージョンを試しました:implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

public class BarChartActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bar_chart2);

        BarChart chart = (BarChart) findViewById(R.id.barchart);

        int[] numArr = {1, 2, 3, 4, 5, 6};
        List<BarEntry> entries = new ArrayList<BarEntry>();
        for (int num : numArr) {
            entries.add(new BarEntry(num, num));
        }
        BarDataSet dataSet = new BarDataSet(entries, "Numbers");
        BarData data = new BarData(dataSet);

        ValueFormatter xAxisFormatter = new DayAxisValueFormatter(chart);
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setGranularity(1f); // only intervals of 1 day
        xAxis.setLabelCount(7);
        xAxis.setValueFormatter(xAxisFormatter);

        chart.setData(data);
        chart.invalidate();
    }

    public class DayAxisValueFormatter extends ValueFormatter {
        private final BarLineChartBase<?> chart;
        public DayAxisValueFormatter(BarLineChartBase<?> chart) {
            this.chart = chart;
        }
        @Override
        public String getFormattedValue(float value) {
            return "your text " + value;
        }
    }
}

出力は次のとおりです。

0
Infomaster