Search in sources :

Example 96 with XYPlot

use of org.jfree.chart.plot.XYPlot in project SIMVA-SoS by SESoS.

the class XYDifferenceRenderer method getLegendItem.

/**
 * Returns a default legend item for the specified series.  Subclasses
 * should override this method to generate customised items.
 *
 * @param datasetIndex  the dataset index (zero-based).
 * @param series  the series index (zero-based).
 *
 * @return A legend item for the series.
 */
@Override
public LegendItem getLegendItem(int datasetIndex, int series) {
    LegendItem result = null;
    XYPlot p = getPlot();
    if (p != null) {
        XYDataset dataset = p.getDataset(datasetIndex);
        if (dataset != null) {
            if (getItemVisible(series, 0)) {
                String label = getLegendItemLabelGenerator().generateLabel(dataset, series);
                String description = label;
                String toolTipText = null;
                if (getLegendItemToolTipGenerator() != null) {
                    toolTipText = getLegendItemToolTipGenerator().generateLabel(dataset, series);
                }
                String urlText = null;
                if (getLegendItemURLGenerator() != null) {
                    urlText = getLegendItemURLGenerator().generateLabel(dataset, series);
                }
                Paint paint = lookupSeriesPaint(series);
                Stroke stroke = lookupSeriesStroke(series);
                Shape line = getLegendLine();
                result = new LegendItem(label, description, toolTipText, urlText, line, stroke, paint);
                result.setLabelFont(lookupLegendTextFont(series));
                Paint labelPaint = lookupLegendTextPaint(series);
                if (labelPaint != null) {
                    result.setLabelPaint(labelPaint);
                }
                result.setDataset(dataset);
                result.setDatasetIndex(datasetIndex);
                result.setSeriesKey(dataset.getSeriesKey(series));
                result.setSeriesIndex(series);
            }
        }
    }
    return result;
}
Also used : Stroke(java.awt.Stroke) Shape(java.awt.Shape) XYPlot(org.jfree.chart.plot.XYPlot) LegendItem(org.jfree.chart.LegendItem) XYDataset(org.jfree.data.xy.XYDataset) Paint(java.awt.Paint)

Example 97 with XYPlot

use of org.jfree.chart.plot.XYPlot in project SIMVA-SoS by SESoS.

the class XYDotRenderer method getLegendItem.

/**
 * Returns a legend item for the specified series.
 *
 * @param datasetIndex  the dataset index (zero-based).
 * @param series  the series index (zero-based).
 *
 * @return A legend item for the series (possibly <code>null</code>).
 */
@Override
public LegendItem getLegendItem(int datasetIndex, int series) {
    // if the renderer isn't assigned to a plot, then we don't have a
    // dataset...
    XYPlot plot = getPlot();
    if (plot == null) {
        return null;
    }
    XYDataset dataset = plot.getDataset(datasetIndex);
    if (dataset == null) {
        return null;
    }
    LegendItem result = null;
    if (getItemVisible(series, 0)) {
        String label = getLegendItemLabelGenerator().generateLabel(dataset, series);
        String description = label;
        String toolTipText = null;
        if (getLegendItemToolTipGenerator() != null) {
            toolTipText = getLegendItemToolTipGenerator().generateLabel(dataset, series);
        }
        String urlText = null;
        if (getLegendItemURLGenerator() != null) {
            urlText = getLegendItemURLGenerator().generateLabel(dataset, series);
        }
        Paint fillPaint = lookupSeriesPaint(series);
        result = new LegendItem(label, description, toolTipText, urlText, getLegendShape(), fillPaint);
        result.setLabelFont(lookupLegendTextFont(series));
        Paint labelPaint = lookupLegendTextPaint(series);
        if (labelPaint != null) {
            result.setLabelPaint(labelPaint);
        }
        result.setSeriesKey(dataset.getSeriesKey(series));
        result.setSeriesIndex(series);
        result.setDataset(dataset);
        result.setDatasetIndex(datasetIndex);
    }
    return result;
}
Also used : XYPlot(org.jfree.chart.plot.XYPlot) LegendItem(org.jfree.chart.LegendItem) XYDataset(org.jfree.data.xy.XYDataset) Paint(java.awt.Paint)

Example 98 with XYPlot

use of org.jfree.chart.plot.XYPlot in project dbeaver by dbeaver.

the class DashboardRendererTimeseries method updateDashboardView.

@Override
public void updateDashboardView(DashboardItem dashboardItem) {
    XYPlot plot = getDashboardPlot(dashboardItem);
    if (plot != null) {
        DashboardChartComposite chartComposite = getChartComposite(dashboardItem);
        DashboardViewConfiguration viewConfiguration = chartComposite.getViewContainer().getViewConfiguration();
        DashboardItemViewConfiguration dashboardConfig = viewConfiguration.getDashboardConfig(dashboardItem.getDashboardId());
        if (dashboardConfig != null) {
            plot.getRangeAxis().setVisible(dashboardConfig.isRangeTicksVisible());
            plot.getDomainAxis().setVisible(dashboardConfig.isDomainTicksVisible());
            plot.setDomainGridlinesVisible(dashboardConfig.isGridVisible());
            plot.setRangeGridlinesVisible(dashboardConfig.isGridVisible());
            chartComposite.getChart().getLegend().setVisible(dashboardConfig.isLegendVisible());
            TimeSeriesCollection chartDataset = (TimeSeriesCollection) plot.getDataset();
            for (int i = 0; i < chartDataset.getSeriesCount(); i++) {
                TimeSeries series = chartDataset.getSeries(i);
                series.setMaximumItemCount(dashboardConfig.getMaxItems());
                series.setMaximumItemAge(dashboardConfig.getMaxAge());
            }
        }
    }
    dashboardItem.getParent().layout(true, true);
}
Also used : XYPlot(org.jfree.chart.plot.XYPlot) DashboardChartComposite(org.jkiss.dbeaver.ui.dashboard.control.DashboardChartComposite) Point(org.eclipse.swt.graphics.Point)

Example 99 with XYPlot

use of org.jfree.chart.plot.XYPlot in project dbeaver by dbeaver.

the class DashboardRendererTimeseries method updateDashboardData.

@Override
public void updateDashboardData(DashboardContainer container, Date lastUpdateTime, DashboardDataset dataset) {
    DashboardChartComposite chartComposite = getChartComposite(container);
    if (chartComposite.isDisposed()) {
        return;
    }
    JFreeChart chart = chartComposite.getChart();
    XYPlot plot = (XYPlot) chart.getPlot();
    TimeSeriesCollection chartDataset = (TimeSeriesCollection) plot.getDataset();
    if (container.getDashboardFetchType() == DashboardFetchType.stats) {
        // Clean previous data before stats update
        chartDataset.removeAllSeries();
    }
    long currentTime = System.currentTimeMillis();
    long secondsPassed = lastUpdateTime == null ? 1 : (currentTime - lastUpdateTime.getTime()) / 1000;
    if (secondsPassed <= 0) {
        secondsPassed = 1;
    }
    DashboardDatasetRow lastRow = (DashboardDatasetRow) chartComposite.getData("last_row");
    List<DashboardDatasetRow> rows = dataset.getRows();
    String[] srcSeries = dataset.getColumnNames();
    for (int i = 0; i < srcSeries.length; i++) {
        String seriesName = srcSeries[i];
        TimeSeries series = chartDataset.getSeries(seriesName);
        if (series == null) {
            series = new TimeSeries(seriesName);
            series.setMaximumItemCount(container.getDashboardMaxItems());
            series.setMaximumItemAge(container.getDashboardMaxAge());
            chartDataset.addSeries(series);
            plot.getRenderer().setSeriesStroke(chartDataset.getSeriesCount() - 1, plot.getRenderer().getBaseStroke());
        }
        switch(container.getDashboardCalcType()) {
            case value:
                {
                    int maxDP = 200;
                    Date startTime = null;
                    for (DashboardDatasetRow row : rows) {
                        if (startTime == null) {
                            startTime = row.getTimestamp();
                        } else {
                            if (container.getDashboardInterval() == DashboardInterval.second || container.getDashboardInterval() == DashboardInterval.millisecond) {
                                long diffSeconds = (row.getTimestamp().getTime() - startTime.getTime()) / 1000;
                                if (diffSeconds > maxDP) {
                                    // Too big difference between start and end points. Stop here otherwise we'll flood chart with too many ticks
                                    break;
                                }
                            }
                        }
                        Object value = row.getValues()[i];
                        if (value instanceof Number) {
                            series.addOrUpdate(makeDataItem(container, row), (Number) value);
                        }
                    }
                    break;
                }
            case delta:
                {
                    if (lastUpdateTime == null) {
                        return;
                    }
                    // System.out.println("LAST=" + lastUpdateTime + "; CUR=" + new Date());
                    for (DashboardDatasetRow row : rows) {
                        if (lastRow != null) {
                            Object prevValue = lastRow.getValues()[i];
                            Object newValue = row.getValues()[i];
                            if (newValue instanceof Number && prevValue instanceof Number) {
                                double deltaValue = ((Number) newValue).doubleValue() - ((Number) prevValue).doubleValue();
                                deltaValue /= secondsPassed;
                                if (container.getDashboardValueType() != DashboardValueType.decimal) {
                                    deltaValue = Math.round(deltaValue);
                                }
                                series.addOrUpdate(makeDataItem(container, row), deltaValue);
                            }
                        }
                    }
                    break;
                }
        }
    }
    if (!rows.isEmpty()) {
        chartComposite.setData("last_row", rows.get(rows.size() - 1));
    }
}
Also used : DashboardDatasetRow(org.jkiss.dbeaver.ui.dashboard.model.data.DashboardDatasetRow) JFreeChart(org.jfree.chart.JFreeChart) Point(org.eclipse.swt.graphics.Point) Date(java.util.Date) XYPlot(org.jfree.chart.plot.XYPlot) DashboardChartComposite(org.jkiss.dbeaver.ui.dashboard.control.DashboardChartComposite)

Example 100 with XYPlot

use of org.jfree.chart.plot.XYPlot in project dbeaver by dbeaver.

the class DashboardRendererTimeseries method createDashboard.

@Override
public DashboardChartComposite createDashboard(Composite composite, DashboardContainer container, DashboardViewContainer viewContainer, Point preferredSize) {
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    // generateSampleSeries(container, dataset);
    DashboardItemViewConfiguration viewConfig = viewContainer.getViewConfiguration().getDashboardConfig(container.getDashboardId());
    Color gridColor = AWTUtils.makeAWTColor(UIStyles.getDefaultTextForeground());
    JFreeChart histogramChart = ChartFactory.createXYLineChart(null, UIDashboardMessages.histogram_timeseries_x_axis_label, UIDashboardMessages.histogram_timeseries_y_axis_label, dataset, PlotOrientation.VERTICAL, true, true, false);
    histogramChart.setBorderVisible(false);
    histogramChart.setPadding(new RectangleInsets(0, 0, 0, 0));
    histogramChart.setTextAntiAlias(true);
    histogramChart.setBackgroundPaint(AWTUtils.makeAWTColor(UIStyles.getDefaultTextBackground()));
    createDefaultLegend(viewConfig, histogramChart);
    ChartPanel chartPanel = new ChartPanel(histogramChart);
    chartPanel.setPreferredSize(new java.awt.Dimension(preferredSize.x, preferredSize.y));
    final XYPlot plot = histogramChart.getXYPlot();
    // Remove border
    plot.setOutlinePaint(null);
    // Remove background
    plot.setShadowGenerator(null);
    plot.setDrawingSupplier(new BaseChartDrawingSupplier());
    // XYItemRenderer renderer = new XYLine3DRenderer();
    // plot.setRenderer(renderer);
    // renderer.setSeriesOutlinePaint(0, Color.black);
    // renderer.setSeriesOutlineStroke(0, new BasicStroke(0.5f));
    {
        DateAxis domainAxis = new DateAxis(UIDashboardMessages.histogram_timeseries_date_axis_label);
        domainAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm:ss"));
        domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
        domainAxis.setAutoRange(true);
        domainAxis.setLabel(null);
        domainAxis.setLowerMargin(0);
        domainAxis.setUpperMargin(0);
        domainAxis.setTickLabelPaint(gridColor);
        domainAxis.setTickLabelFont(DEFAULT_TICK_LABEL_FONT);
        domainAxis.setTickLabelInsets(RectangleInsets.ZERO_INSETS);
        DateTickUnitType unitType;
        switch(container.getDashboardInterval()) {
            case minute:
                unitType = DateTickUnitType.MINUTE;
                break;
            case hour:
                unitType = DateTickUnitType.HOUR;
                break;
            case day:
            case week:
                unitType = DateTickUnitType.DAY;
                break;
            case month:
                unitType = DateTickUnitType.MONTH;
                break;
            case year:
                unitType = DateTickUnitType.YEAR;
                break;
            default:
                unitType = DateTickUnitType.SECOND;
                break;
        }
        int tickCount = container.getDashboardMaxItems();
        if (tickCount > 40) {
            tickCount = container.getDashboardMaxItems() / 5;
        }
        if (tickCount <= 1) {
            tickCount = 10;
        }
        domainAxis.setTickUnit(new DateTickUnit(unitType, Math.min(MAX_TIMESERIES_RANGE_LABELS, tickCount)));
        if (viewConfig != null && !viewConfig.isDomainTicksVisible()) {
            domainAxis.setVisible(false);
        }
        plot.setDomainAxis(domainAxis);
    }
    {
        ValueAxis rangeAxis = plot.getRangeAxis();
        rangeAxis.setLabel(null);
        rangeAxis.setTickLabelPaint(gridColor);
        rangeAxis.setTickLabelFont(DEFAULT_TICK_LABEL_FONT);
        rangeAxis.setTickLabelInsets(RectangleInsets.ZERO_INSETS);
        rangeAxis.setStandardTickUnits(DashboardUtils.getTickUnitsSource(container.getDashboardValueType()));
        if (container.getDashboardValueType() == DashboardValueType.percent) {
            rangeAxis.setLowerBound(0);
            rangeAxis.setUpperBound(100);
        }
        if (viewConfig != null && !viewConfig.isRangeTicksVisible()) {
            rangeAxis.setVisible(false);
        }
    // rangeAxis.setLowerMargin(0.2);
    // rangeAxis.setLowerBound(.1);
    }
    XYItemRenderer plotRenderer = plot.getRenderer();
    plotRenderer.setBaseItemLabelPaint(gridColor);
    BasicStroke stroke = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 10.0f, null, 0.0f);
    plot.getRenderer().setBaseStroke(stroke);
    // Set background
    plot.setBackgroundPaint(histogramChart.getBackgroundPaint());
    /*
        Stroke gridStroke = new BasicStroke(0.1f,
            BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 1.0f,
            new float[] {1.0f, 1.0f}, 0.0f);
*/
    plot.setDomainGridlinePaint(gridColor);
    // plot.setDomainGridlineStroke(gridStroke);
    plot.setDomainGridlinesVisible(viewConfig == null || viewConfig.isGridVisible());
    plot.setRangeGridlinePaint(gridColor);
    // plot.setRangeGridlineStroke(gridStroke);
    plot.setRangeGridlinesVisible(viewConfig == null || viewConfig.isGridVisible());
    DashboardChartComposite chartComposite = createChartComposite(composite, container, viewContainer, preferredSize);
    chartComposite.setChart(histogramChart);
    return chartComposite;
}
Also used : ChartPanel(org.jfree.chart.ChartPanel) BaseChartDrawingSupplier(org.jkiss.dbeaver.ui.charts.BaseChartDrawingSupplier) JFreeChart(org.jfree.chart.JFreeChart) XYPlot(org.jfree.chart.plot.XYPlot) DashboardChartComposite(org.jkiss.dbeaver.ui.dashboard.control.DashboardChartComposite) RectangleInsets(org.jfree.ui.RectangleInsets) XYItemRenderer(org.jfree.chart.renderer.xy.XYItemRenderer) SimpleDateFormat(java.text.SimpleDateFormat) java.awt(java.awt)

Aggregations

XYPlot (org.jfree.chart.plot.XYPlot)330 JFreeChart (org.jfree.chart.JFreeChart)154 NumberAxis (org.jfree.chart.axis.NumberAxis)122 ValueAxis (org.jfree.chart.axis.ValueAxis)77 XYDataset (org.jfree.data.xy.XYDataset)60 Test (org.junit.Test)56 Color (java.awt.Color)55 XYSeries (org.jfree.data.xy.XYSeries)54 DateAxis (org.jfree.chart.axis.DateAxis)47 XYLineAndShapeRenderer (org.jfree.chart.renderer.xy.XYLineAndShapeRenderer)47 XYSeriesCollection (org.jfree.data.xy.XYSeriesCollection)47 CombinedDomainXYPlot (org.jfree.chart.plot.CombinedDomainXYPlot)46 XYItemRenderer (org.jfree.chart.renderer.xy.XYItemRenderer)44 StandardXYToolTipGenerator (org.jfree.chart.labels.StandardXYToolTipGenerator)38 Range (org.jfree.data.Range)36 CombinedRangeXYPlot (org.jfree.chart.plot.CombinedRangeXYPlot)33 SimpleDateFormat (java.text.SimpleDateFormat)30 Paint (java.awt.Paint)29 BasicStroke (java.awt.BasicStroke)24 XYToolTipGenerator (org.jfree.chart.labels.XYToolTipGenerator)24