Как показать желаемое количество setTickLabelsVisible false в линейном графике javafx - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь построить график временных рядов для данных фондового рынка.Я получаю входные данные динамически, и они отображаются на линейном графике.

Все, что я хочу, - это вывести на график все данные тиков, но хочу показать только желаемое количество меток тиков.

Пример: скажем, я начал строить график в 10 часов утра, и я строю графики на 3 секунды, поэтому после 4 часов, то есть 1 часа дня, я хочу, чтобы каждый тик был нанесен, но метка на Xaxisдолжен быть на мой выбор, скажем, только 4 метки (10:00, 11:00, 02:00, 17:00).

enter image description here

Пожалуйста, см. желаемый график: enter image description here

Большое спасибо заранее.:)

Код:

    @FXML
    private void buttonGraph(ActionEvent event) throws ParseException{  

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");  
        LocalTime initTime = LocalTime.now();
        Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
        Session session = cluster.connect("pass_master");
        lineChart.getData().clear();            
        ResultSet results2 = session.execute("select count(*) as ct from pass8 where tkn ="+basic.get(tkn.getText())+" and timestmp <= "+etDate+" and timestmp >= "+stDate);
        String total = null;
        for( Row row : results2){               
           total = row.toString();              
        }           
        System.out.println(total);
        System.out.println(total.substring(4, total.length()-1));
        int totalrows = Integer.valueOf(total.substring(4, total.length()-1));
        System.out.println("This is int value : "+totalrows);
        XYChart.Series<String,Double> series = new XYChart.Series<>();
        y.setAutoRanging(false);
        y.setSide(Side.RIGHT);          
        if (graphUpdater == null) {
            graphUpdater =new Thread(new Runnable() {
                double min = 10000000;
                double max = 0;
                String chartData ="";
                String invisible = "";
                int i = 0;
                XYChart.Data item;
                public void run() {
                    while(running) {
                        try {
                            Quote quote = MulticastReciever.getInstance().getQuote(tkn.getText());                              
                            if (quote!=null) {
                                LocalDateTime now = LocalDateTime.now();    
                                double value = quote.getLast();
                                if (value < min) {
                                    min = value;
                                }
                                if (value > max) {
                                    max = value;
                                }
                                i++;                                    
                                a1.add(value);                                                                          
                                 if (i % 5 == 0 ){
                                    chartData = dtf.format(now);
                                    x.setTickLabelFill(Color.RED);                                      
                                    item = new XYChart.Data<>(chartData, value);                                 
                                 }
                                    else {
                                        invisible += (char)32;
                                        chartData = dtf.format(now);
                                        x.setTickMarkVisible(false);                                            
                                        item = new XYChart.Data<>(chartData, value);                                               
                                 }
                                series.getData().add(item);                             
                                lineChart.setCreateSymbols(false);
                                lineChart.setLegendVisible(false);                                  
                                y.setLowerBound(min-(.001*min));
                                y.setUpperBound(max+(.001*max));
                                y.setTickLabelFill(Color.RED);
                                x.setTickMarkVisible(false);
                                y.setTickMarkVisible(false);
                            }                               
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
            graphUpdater.start();
        }               
        System.out.println("previousToken:"+previousToken+", GC:"+this);
        int currentToken = Integer.valueOf(basic.get(tkn.getText()));

        if (previousToken!=null) {
            System.out.println("Going to unsubscribe token:"+previousToken);
            MulticastReciever.getInstance().unsubscribeMarketData(previousToken);
        }           

        MulticastReciever.getInstance().subscribeMarketData(tkn.getText(), currentToken);
        previousToken = currentToken;                               
        int factor=10;
        if(totalrows>300){
         factor =totalrows/300;
        }
        else
        {
            factor=1;
        }
        System.out.println(factor);
        int count = 0;          
        x.setTickLabelRotation(45.0);
        System.out.println("This is the property: "+x.isTickLabelsVisible());
        x.setTickLabelGap(5000.0);
        System.out.println("getTickLabelGap:"+x.getTickLabelGap());
        x.setTickLabelGap(10.0);
        System.out.println("getTickLabelGap:"+x.getTickLabelGap());
        lineChart.getData().addAll(series);
        a1.clear();                 
        for(final XYChart.Data<String,Double> data :series.getData()){              
            data.getNode().addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    lbl.setText("X :"+data.getXValue()+"\nY :"+ String.valueOf(data.getYValue()));
                    Tooltip.install(data.getNode(), new Tooltip("X :"+data.getXValue()+"\nY :"+ String.valueOf(data.getYValue())));                     
                }
            });
        }               
        cluster.close();
    }
...