首页 > 解决方案 > 如何快速处理使用 jfreechart 创建的折线图

问题描述

目前我通过 swt 使用 jfreechart。

当前的问题是几万个文件(目前在10000到20000之间,以后最多100000)

目前使用 DefaultXYDataset 和 XYLineAndShapeRenderer 打开文件后加载数据。

有问题。

  1. 屏幕上的图表不是即时的(几秒钟内)。在当前文件打开侦听器中使用 setchart。

  2. 调整外壳大小时,绘制图表会有延迟。这会导致程序运行缓慢。

  3. jfreechart 缩放功能和鼠标拖动事件很慢。

问题

  1. 在 chartcomposite 中重新绘制新数据图表时,是否有快速绘制方法?

  2. 本质上,XYLineAndShapeRenderer 不擅长渲染几万条数据吗?如果是这样,最好的方法是什么?

  3. 使用 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;
}

标签: javaswtjfreechart

解决方案


推荐阅读