首页 文章

在LineChart中更改x轴起点和终点值

提问于
浏览
0

尝试在我的费用管理器应用中实现LineChart .

以下是调试窗口中的条目:

entries = {ArrayList@5297}  size = 5
0 = {Entry@5367} "Entry, x: 11.0 y: 0.0"
1 = {Entry@5368} "Entry, x: 12.0 y: -5.0"
2 = {Entry@5369} "Entry, x: 1.0 y: 0.0"
3 = {Entry@5370} "Entry, x: 2.0 y: 5.0"
4 = {Entry@5371} "Entry, x: 3.0 y: 0.0"

此处,XAxis值表示一年中的月份,YAxis值表示该月的净收入 .

这是我的代码:

List<Integer> xAxisValues = new ArrayList<>();
//I add xAxis values as listed above

List<Float> yAxisValues = new ArrayList<>();
//I add yAxis values as listed above

List<Entry> entries = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        entries.add(new Entry(xAxisValues.get(i), yAxisValues.get(i)));
    }

LineDataSet dataSet = new LineDataSet(entries, "Company Net Income");

dataSet.setColor(getActivity().getResources().getColor(R.color.colorAccent));

    LineData data = new LineData();
    data.addDataSet(dataSet);

    final HashMap<Integer, String> monthMap = new HashMap<>();
    monthMap.put(1, "Jan");
    monthMap.put(2, "Feb");
    monthMap.put(3, "Mar");
    monthMap.put(4, "Apr");
    monthMap.put(5, "May");
    monthMap.put(6, "Jun");
    monthMap.put(7, "Jul");
    monthMap.put(8, "Aug");
    monthMap.put(9, "Sep");
    monthMap.put(10, "Oct");
    monthMap.put(11, "Nov");
    monthMap.put(12, "Dec");

    XAxis xAxis = lineChartMonth.getXAxis();
    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return monthMap.get((int)value);
        }
    });

    lineChartMonth.setData(data);
    lineChartMonth.invalidate();

但正如你在这里看到的那样

screenshot

无论它们在List条目中的顺序如何,xaxis值始终为0-12 . 我想x轴值是最后5个月,即11月(11),12月(12),1月(1),2月(2),3月(3) . 请帮帮我 .

2 回答

  • 0

    XAxis设置

    final HashMap<Integer, String> monthMap = new HashMap<>(); 
     SimpleDateFormat format = new SimpleDateFormat("MMMM");
     SimpleDateFormat numMonthFormat = new SimpleDateFormat("MM");
    
            // Get last 5 month
    
                for(int i=-4; i<=0; i++){
                    Calendar cal=Calendar.getInstance();
                    cal.add(Calendar.MONTH, i);
                    Date date = cal.getTime();
    
                    String dateOutput = format.format(date);
                    String numMonth= numMonthFormat.format(date);
    
                    monthMap.put(numMonth, dateOutput);
                }
    
         XAxis xAxis = lineChartMonth.getXAxis();
          xAxis.setLabelCount(5);
            xAxis.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    return monthMap.get((int)value);
                }
            });
    
  • 0

    所以,问题出在这里:我正在添加像这样的XAxis值

    List<Integer> xAxisValues = new ArrayList<>();
        calendar=Calendar.getInstance();
        calendar.add(Calendar.MONTH, -5);
        for (int i = 0; i < 5; i++) {
            int month = calendar.get(Calendar.MONTH )+1;
            xAxisValues.add(month);
            calendar.add(Calendar.MONTH, 1);
        }
    

    它给了我这些值{11,12,1,2,3},所以线图假设我有0到12的13个条目的值 . 相反,我使用下面的代码将XAxis值更改为{0,1,2,3,4},以便xaxis中只显示5个值 . 之后我可以将0映射到currentMonth-4(Nov),1映射到currentMonth-3(Dec)等 .

    List<Integer> xAxisValues = new ArrayList<>();
        for (int i = -4; i <= 0; i++) {
            xAxisValues.add(i);
        }
    List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            entries.add(new Entry(xAxisValues.get(i), yAxisValues.get(i)));
        }
    final HashMap<Integer, String> monthMap = new HashMap<>();
        for (int i = -4; i <= 0; i++) {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.MONTH, i);
            String dateOutput = cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());
            Log.e("Current Month", dateOutput);
            monthMap.put(i, dateOutput);
        }
    XAxis xAxis = lineChartMonth.getXAxis();
        xAxis.setGranularity(1f);
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return monthMap.get((int) value);
            }
        });
    

    这是working screenshot

相关问题