GWT Google Visualization - 后续重绘会改变Y轴步数吗?

时间:2014-02-23 04:16:03

标签: java gwt google-visualization gwt-rpc

我对GWT谷歌可视化库包装器有一个奇怪的错误,特别是AnnotatedTimeLine。

即,我在最初的ajax调用google可视化工具上绘制我的图表,然后使用计时器每5秒重绘一次。每次重绘时,Y轴上的“步数”会改变它们的值和频率(有时你会以更频繁的间隔)。图表的注意值保持完全相同。我已经包含了两个截图,向您展示它的两个立场。在每次后续重绘时,它都会从一个姿势变为另一个姿势。请注意右侧892和900上的不同情绪值,即使两种情况下图表上的值都是903。

Stance 1

Stance 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函数的方式必须代表问题。但我真的需要允许重绘,因为现在每次后续重绘都非常慢,并且屏幕上有明显的闪光。

1 个答案:

答案 0 :(得分:0)

我认为这可能是由于带注释的时间线图表中的错误:

请参阅此处查看thread

Issue 766Issue 107