Android GraphView неправильные шаги по оси X при форматировании меток

#android #graph #android-graphview

#Android #График #android-graphview

Вопрос:

Я использую android-graphview для построения графиков со временем для приложения для прогнозирования погоды.

На моей вкладке «24 часа» я отображаю данные с текущего времени и до 24 часов спустя. У меня есть прогнозы погоды с шагом в 3 часа. Чтобы добиться правильного отображения по оси x, сначала я должен сохранять часы аддитивно при изменении дня. Итак, если текущее время составляет 18:00 для отображения данных до завтра 18:00, то значения по оси x, которые я отображаю, будут —> 18 21 24 27 30 33 36 39 42. Затем я использую средство форматирования меток, чтобы изменить метки по оси x на —> 18 21 0 3 6 9 12 15 18. График отображается правильно в правильных точках, однако метки следуют за шагом 2 вместо 3, но диапазон правильный.

System.out.println(«WHAT1?» .. правильно отображает пары входных точек данных с увеличением часов с шагом в 3, но System.out.println («pout» .. и «pour» показывают увеличение значений по оси x с шагом в 2 (хотя и находятся в правильных положениях). Как я могу отобразить метки на 3-часовом шаге?

Что я делаю не так? Вот код:

 DataPoint b= new DataPoint(0,0);//test
            DataPoint[] point_array= new DataPoint[9];
            String[] time_label_24=new String[9];

            GraphView graph = (GraphView) findViewById(R.id.graph);
            hour=Integer.parseInt(Lista.get(x)[15]);

            for(int i=x;i<=x 8;i  ){   
                if((i-x)<Lista.size()) {
                    b = new DataPoint(hour, Float.parseFloat(Lista.get(i)[4]));
                    point_array[i - x] = b;
                    System.out.println("WHAT1? "   (i - x)   "  "   point_array[i - x]   "  "   hour);
                    time_label_24[i-x]=Lista.get(i)[15];
                    hour = hour   3;
                }
            }

            LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(point_array);   
            graph.addSeries(series);                                                             


            h=Integer.parseInt(Lista.get(x)[15]);

            graph.getViewport().setXAxisBoundsManual(true);

            //graph.getViewport().setMinX(Integer.parseInt(Lista.get(x)[15])-1);
            //graph.getViewport().setMaxX(Integer.parseInt(Lista.get(x)[15]) 8*3 1);

            graph.getViewport().setMinX(Integer.parseInt(Lista.get(x)[15]));
            graph.getViewport().setMaxX(Integer.parseInt(Lista.get(x)[15]) 8*3);

            graph.getGridLabelRenderer().setNumHorizontalLabels(9);  //9

            graph.getGridLabelRenderer().setTextSize(12f);
            graph.getGridLabelRenderer().reloadStyles();



            graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() {
                @Override
                public String formatLabel(double value, boolean isValueX) {
                    int xylabel;
                    if (isValueX) {

                        if (value < 24) {
                            System.out.println("pout " value "  "   String.valueOf(value));
                            xylabel = (int) Math.round(value);
                            return String.valueOf(xylabel);  
                        } else{
                            System.out.println("pour " value "  "   String.valueOf(value%24));
                            xylabel = (int) Math.round(value);
                            return String.valueOf(xylabel%24); 
                        }
                    }else {
                        xylabel = (int) Math.round(value);
                        return String.valueOf(xylabel); // let graphview generate Y-axis label for us
                    }
                }
            });
        ////////


            hour=Integer.parseInt(Lista.get(x)[15]);
            for(int i=x;i<=x 8;i  ){   // Same process for Temp FEEL                                        
                if((i-x)<Lista.size()) {
                    b = new DataPoint(hour, Float.parseFloat(Lista.get(i)[13]));
                    point_array[i - x] = b;
                    hour = hour   3;
                    time_label_24[i-x]=Lista.get(i)[15];         
                    System.out.println("What2? "   point_array[i - x]);
                }
            }



            LineGraphSeries<DataPoint> series2 = new LineGraphSeries<DataPoint>(point_array);
            graph.addSeries(series2);

            series.setTitle("Temp");
            series2.setTitle("Feel");

            series.setColor(Color.WHITE);
            series2.setColor(Color.RED);

            graph.getLegendRenderer().setVisible(true);
            graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP);
  

Вот изображение графика:

результирующий график

Ответ №1:

попробуйте отключить округление с помощью

graph.getGridLabelRenderer().setHumanRounding(false);