GWT Google Visualization - последующие перерисовки изменяют количество шагов оси Y?

У меня странная ошибка с оболочкой библиотеки визуализации GWT google, в частности AnnotatedTimeLine.

А именно, я рисую свою диаграмму при первоначальном вызове ajax инструментов визуализации Google, а затем перерисовываю ее каждые 5 секунд с помощью таймера. Каждый раз, когда он перерисовывается, «шаги» по оси Y меняют свои значения и частоту (иногда они будут появляться с более частыми интервалами). Обратите внимание, что значения на графике остаются неизменными. Я включил 2 скриншота, чтобы показать вам две позиции. При каждой последующей перерисовке он меняется с одной позиции на другую. Обратите внимание на разные значения тональности справа 892 и 900, даже если значение на графике равно 903 в обоих случаях.

Стойка 1

Стойка 2

Я считаю, что это могло быть из-за двойной оси Y. При каждой перерисовке фокус по мере того, как "основная" ось Y меняется с одной на другую. Я думаю, это может быть подтверждено тем фактом, что в первом параметре Price отображается как первый параметр, а во втором - наоборот. Любые идеи?

Вот мой код на стороне клиента:

public class GUI implements EntryPoint {

    // create  a remote service proxy to talk to server side-side data service
    private final ChartDataServiceAsync chartDataSvc = GWT.create(ChartDataService.class);  
    private AnnotatedTimeLine graph;

    public void onModuleLoad() {
    // Create a callback to be called when the visualization API
    // has been loaded.
    Runnable onLoadCallback = new Runnable() {
      public void run() {
          Panel panel = RootPanel.get();
          graph = new AnnotatedTimeLine("1000px", "500px");
          // used in css file
          graph.addStyleName("timeLine");
        panel.add(graph);
        createTable();
      }
    };

    // Load the visualization api, passing the onLoadCallback to be called
    // when loading is done.
    VisualizationUtils.loadVisualizationApi(onLoadCallback, AnnotatedTimeLine.PACKAGE);

    Timer timeoutTimer = new Timer() {
     public void run() {
            createTable();
//            Window.alert("Reloaded chart.");  
      }
    };
    timeoutTimer.scheduleRepeating(1000*5);

}

и

private Options createOptions() {
    Options options = Options.create();
    options.setDisplayZoomButtons(true);
    options.setDisplayAnnotations(false);
    options.setAllowRedraw(true);
    options.setDateFormat("MMMM dd, yyyy");
    options.setDisplayDateBarSeparator(true);
    options.setDisplayExactValues(true);
    options.setDisplayRangeSelector(false);
    options.setThickness(2);
    options.setScaleColumns(0,1);
    options.setScaleType(ScaleType.ALLMAXIMIZE);
    Map<Integer,String> m1 = new LinkedHashMap<Integer,String>();
    m1.put(0,".0000");
    m1.put(1, "######");
    options.setNumberFormats(m1);
    return options;
} // end createOptions()

private void createTable() {

    final DataTable data = DataTable.create();
    data.addColumn(ColumnType.DATE, "Date");
    data.addColumn(ColumnType.NUMBER, "Price");
    data.addColumn(ColumnType.NUMBER, "Sentiment");  

    // Set up the callback object.
    AsyncCallback<List<PriceData>> callback = new AsyncCallback<List<PriceData>>() {
      public void onFailure(Throwable caught) {
        // TODO: Do something with errors.
          System.out.println("RPC call failed!");
      }

      public void onSuccess(List<PriceData> result) {
        System.out.println("success!");
        data.addRows(result.size());
        for (int i = 0; i < result.size(); i++) {
          String dateString = result.get(i).getDate();
          DateTimeFormat form1 = DateTimeFormat.getFormat("dd/MM/yyyy HH:mm:ss");
          Date d = form1.parse(dateString);
          data.setValue(i, 0, d);
          data.setValue(i, 1, result.get(i).getPrice());
          data.setValue(i, 2, i);
        }
        // Create a chart visualization.
        graph.draw(data, createOptions());

      }
    };
    // Make the call to the stock price service.
    chartDataSvc.getChartData("Prices.csv", callback);
} // end createTable()

Вызов RPC просто извлекает данные из файла на сервере.

Изменить: я заметил, что если я установлю параметры allowRedraw (false), все эти проблемы будут решены. Также была проблема с последующими перерисовками, не замечая изменений в файле данных, что также решает эту проблему. Таким образом, проблема должна отражаться в функциях allowRedraw. Но мне действительно нужно разрешить перерисовку, так как теперь каждая последующая перерисовка выполняется очень медленно и имеет явную вспышку на экране.


person mzm    schedule 23.02.2014    source источник


Ответы (1)


Я думаю, это может быть связано с ошибкой на графике аннотированной временной шкалы:

См. Здесь поток

ошибка 766 и Проблема 107

person Ümit    schedule 24.02.2014