我对GWT谷歌可视化库包装器有一个奇怪的错误,特别是AnnotatedTimeLine。
即,我在最初的ajax调用google可视化工具上绘制我的图表,然后使用计时器每5秒重绘一次。每次重绘时,Y轴上的“步数”会改变它们的值和频率(有时你会以更频繁的间隔)。图表的注意值保持完全相同。我已经包含了两个截图,向您展示它的两个立场。在每次后续重绘时,它都会从一个姿势变为另一个姿势。请注意右侧892和900上的不同情绪值,即使两种情况下图表上的值都是903。
我相信这可能是因为双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函数的方式必须代表问题。但我真的需要允许重绘,因为现在每次后续重绘都非常慢,并且屏幕上有明显的闪光。