【问题标题】:DynamicTimeSeriesCollection used and wants to highlight peak or max value使用 DynamicTimeSeriesCollection 并希望突出显示峰值或最大值
【发布时间】:2022-06-12 21:36:14
【问题描述】:

请让我知道我使用 DynamicTimeSeriesCollection 制作 JFreeChart,一切正常,但我想在 Y 轴值的峰值上添加圆圈,例如它正在创建 0-50 的随机值图表,当它检测到高时我需要时间段内的值,它将圈出或突出显示。

  private JFreeChart createChart(final XYDataset dataset) {
                final JFreeChart result = ChartFactory.createTimeSeriesChart(TITLE1, "Time (seconds)", "Intensity (cm)",
                        dataset, true, true, false);
        
                final XYPlot plot = result.getXYPlot();
                ValueAxis domain = plot.getDomainAxis();
                domain.setAutoRange(true);
        
                ValueAxis range = plot.getRangeAxis();
                // range.setRange(-MINMAX, MINMAX);
                range.setAutoRange(true);
                XYItemRenderer render = plot.getRenderer();
                render.setSeriesPaint(0, Color.blue);
                return result;
            }
        private XYDataset createDataset1() {
                final DynamicTimeSeriesCollection dataset = new DynamicTimeSeriesCollection(1, COUNT, new Second());
                dataset.setTimeBase(new Second(0, 0, 0, 24, 5, 2022));
                dataset.addSeries(gaussianData(), 0, "X");
        
                timer = new Timer(FAST, new ActionListener() {
                    float[] newData = new float[1];
        
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        newData[0] = randomValue();
                        dataset.advanceTime();
                        dataset.appendData(newData);
        
                    }
                });
                return dataset;
            }

【问题讨论】:

  • 试一试XYShapeAnnotation examples;按照建议here,也可以考虑TimeSeriesCollection
  • 这很有用,但请告诉我,我们可以在波形峰值上打印值(Y 轴值)。
  • 请让我知道我们是否可以从所需时间开始记录时间序列图表数据。如果图表运行 0-120 秒,如果我们想显示 30-80 秒的数据,那么我们应该看到它。
  • 也许可以试试XYTextAnnotation,看到hereXYItemLabelGenerator,看到here。在here 上看到了一些域名替代品。

标签: java swing max jfreechart


【解决方案1】:

@trashgod,请让我知道我编写并运行了它,但是当您向我发送链接时,图表上的值没有显示。

@SuppressWarnings("serial") 私有静态类 LabeledXYDataset 扩展 AbstractXYDataset {

        private static final int N = 26;
        private List<Number> x = new ArrayList<Number>(N);
        private List<Number> y = new ArrayList<Number>(N);
        private List<String> label = new ArrayList<String>(N);

        @SuppressWarnings("unused")
        public void add(double x, double y, String label) {
            this.x.add(x);
            this.y.add(y);
            this.label.add(label);
        }

        public String getLabel(int series, int item) {
            return label.get(item);
        }

        @Override
        public int getSeriesCount() {
            return 1;
        }

        @SuppressWarnings("rawtypes")
        @Override
        public Comparable getSeriesKey(int series) {
            return "Unit";
        }

        @Override
        public int getItemCount(int series) {
            return label.size();
        }

        @Override
        public Number getX(int series, int item) {
            return x.get(item);
        }

        @Override
        public Number getY(int series, int item) {
            return y.get(item);
        }
    }

    private static class LabelGenerator implements XYItemLabelGenerator {

        @Override
        public String generateLabel(XYDataset dataset, int series, int item) {
            LabeledXYDataset labelSource = (LabeledXYDataset) dataset;
            return labelSource.getLabel(series, item);
        }

    }

    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart result = ChartFactory.createTimeSeriesChart(TITLE1, "Time (seconds)", "Intensity (cm)",
                dataset, true, true, false);

        final XYPlot plot = result.getXYPlot();
        ValueAxis domain = plot.getDomainAxis();
        domain.setAutoRange(true);

        ValueAxis range = plot.getRangeAxis();
        // range.setRange(-MINMAX, MINMAX);
        range.setAutoRange(true);

        XYItemRenderer render = plot.getRenderer();
        render.setSeriesPaint(0, Color.blue);

        XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
        renderer.setBaseShapesVisible(true);
        renderer.setBaseShapesFilled(true);

//      XYTextAnnotation textAnnotaion = new XYTextAnnotation("", 20, 50);
//      plot.addAnnotation(textAnnotaion);

        XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
        renderer1.setBaseItemLabelGenerator(new LabelGenerator());
        renderer1.setBaseItemLabelPaint(Color.green.darker());
        renderer1.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
        renderer1.setBaseItemLabelFont(renderer1.getBaseItemLabelFont().deriveFont(14f));
        renderer1.setBaseItemLabelsVisible(true);
        renderer1.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
        return result;
    }

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多