java - 如何快速处理使用 jfreechart 创建的折线图
问题描述
目前我通过 swt 使用 jfreechart。
当前的问题是几万个文件(目前在10000到20000之间,以后最多100000)
目前使用 DefaultXYDataset 和 XYLineAndShapeRenderer 打开文件后加载数据。
有问题。
屏幕上的图表不是即时的(几秒钟内)。在当前文件打开侦听器中使用 setchart。
调整外壳大小时,绘制图表会有延迟。这会导致程序运行缓慢。
jfreechart 缩放功能和鼠标拖动事件很慢。
问题
在 chartcomposite 中重新绘制新数据图表时,是否有快速绘制方法?
本质上,XYLineAndShapeRenderer 不擅长渲染几万条数据吗?如果是这样,最好的方法是什么?
使用 fastscatterplot 有轻微的加速,但我希望这条线是一条线而不是一个点。有没有办法绘制快速散点图?
这是我的代码。您当前的代码中是否存在速度问题?
public void open() {
Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(800, 600);
shell.setText("SWT Application");
shell.setLayout(new GridLayout(2, false));
...(setting widget and layout)
chart = createChart(createDataset());
frame = new ChartComposite(shell, SWT.NONE, chart, true);
frame.setDisplayToolTips(false);
GridData data = new GridData(GridData.FILL_BOTH);
data.widthHint = 600;
data.heightHint = 366;
frame.setLayoutData(data);
MenuItem mntmOpen = new MenuItem(menu_1, SWT.NONE);
mntmOpen.setText("Open");
mntmOpen.addListener(SWT.Selection, event -> {
...(parsing data)
//using DefaultXYDataset and XYLineAndShapeRenderer
chart = createChart(createDDataset(xDataArray1,yDataArray1));
frame.setChart(chart); // Is this the wrong way to draw a new chart?
shell.open();
});
private JFreeChart createChart(XYDataset dataset){
JFreeChart chart = ChartFactory.createXYLineChart(
"", "x", "y", dataset,
PlotOrientation.VERTICAL, false, false, false);
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, false);
int seriesCount = plot.getSeriesCount();
for (int i = 0; i < seriesCount; i++) {
plot.getRenderer().setSeriesStroke(i, new BasicStroke(0));
}
...(set gridline and plot color)
...(set domain&range axis)
return chart;
}
解决方案
推荐阅读
- python - 如何查找安装在我的 pip 虚拟环境中的所有软件包的大小
- java - android.view.InflateException: Binary XML file line #30: Binary XML file line #30: Error inflating class android.view.View
- traefik - 如何通过 docker 容器中的 traefik 发布 websocket
- java - org.json.JSONException: Index 0 out of range [0..0) 如何解决?
- css - Angular:动画显示卡在另一张卡的顶部
- android - 删除项目后如何更新列表视图?
- android - 在选择器中使用向量
- php - 更正 Cron 作业命令以使 PHP require() 工作
- python - 在页面刷新时停止表单提交
- c++ - 对程序的输出感到困惑