Как сохранить несколько графиков в jfreechart? - PullRequest
1 голос
/ 14 марта 2019

Большое спасибо за всю помощь, которую вы всегда оказываете.

Мне нужно сохранить следующее изображение

, но когда я использую утилиту Jfreechart (ChartUtils.saveChartAsPNG) для сохранения я могу сохранить только каждый график отдельно, а не полный.

И когда я использую утилиту (BufferedImage), она сохраняет очень плохое качество, много размытых пикселей, плохое разрешение.

Какую альтернативу я могу использовать?

Это мой код:

    String direccionTXTlinea = "\\\\172.16.40.10\\Geodesia\\volcanes\\lineas\\Maule_PUEL-MAU2.txt";
    LectorTXT lectorTXT = new LectorTXT();
    lectorTXT.leerTXTlinea(direccionTXTlinea);

    TransformarTXT transformarTXT = new TransformarTXT();
    transformarTXT.transformarDatosLinea(lectorTXT.getListaLinea());

    GeneradorTimeSerie timeSerieTXT = new GeneradorTimeSerie();
    timeSerieTXT.setTransformarTXT(transformarTXT);
    timeSerieTXT.crearTimeSerieTXT();

    TimeSeriesCollection UNO = new TimeSeriesCollection();
    TimeSeriesCollection DOS = new TimeSeriesCollection();
    TimeSeriesCollection TRES = new TimeSeriesCollection();

    UNO.addSeries(timeSerieTXT.getSerieUNOmasERROR());
    UNO.addSeries(timeSerieTXT.getSerieUNO());
    UNO.addSeries(timeSerieTXT.getSerieUNOmenosERROR());

    DOS.addSeries(timeSerieTXT.getSerieDOSmasERROR());
    DOS.addSeries(timeSerieTXT.getSerieDOS());
    DOS.addSeries(timeSerieTXT.getSerieDOSmenosERROR());

    TRES.addSeries(timeSerieTXT.getSerieTRESmasERROR());
    TRES.addSeries(timeSerieTXT.getSerieTRES());
    TRES.addSeries(timeSerieTXT.getSerieTRESmenosERROR());

    XYDataset datasetUNO = UNO;
    XYDataset datasetDOS = DOS;



    NumberAxis rangeAxis1 = new NumberAxis("L.Linea cm");
    rangeAxis1.setAutoRangeIncludesZero(false);
    XYItemRenderer renderer1 = new StandardXYItemRenderer();
    renderer1.setSeriesPaint(0, Color.decode("#C1ECFF"));
    renderer1.setSeriesPaint(2, Color.decode("#C1ECFF"));
    renderer1.setSeriesPaint(1, Color.decode("#00067F"));
    XYPlot subplot1 = new XYPlot(datasetUNO, null, rangeAxis1, renderer1);

    NumberAxis rangeAxis2 = new NumberAxis("D.Vertical cm 2");
    rangeAxis2.setAutoRangeIncludesZero(false);        
    XYItemRenderer renderer2 = new StandardXYItemRenderer();
    renderer2.setSeriesPaint(0, Color.decode("#FF8B8A"));
    renderer2.setSeriesPaint(2, Color.decode("#FF8B8A"));
    renderer2.setSeriesPaint(1, Color.decode("#FF0800"));
    XYPlot subplot2 = new XYPlot(datasetDOS, null, rangeAxis2, renderer2);


    ValueAxis domainAxis = new DateAxis();
    CombinedDomainXYPlot plot = new CombinedDomainXYPlot();
    plot.setDomainAxis(domainAxis);

    plot.add(subplot1, 1);
    plot.add(subplot2, 1);

    plot.setOrientation(PlotOrientation.VERTICAL);

    String Estacion1 = "\\\\172.16.40.10\\Geodesia\\volcanes\\zona2\\Maule\\Maule_mau2.txt";
    String Estacion2 = "\\\\172.16.40.10\\Geodesia\\volcanes\\zona2\\Maule\\Maule_nieb.txt";

    LectorTXT lectorTXTEstacion1 = new LectorTXT();
    LectorTXT lectorTXTEstacion2 = new LectorTXT();
    lectorTXTEstacion1.leerTXTlinea(Estacion1);
    lectorTXTEstacion2.leerTXTlinea(Estacion2);

    TransformarTXT transformarTXTestacion1 = new TransformarTXT();
    transformarTXTestacion1.transformarDatosEstacion(lectorTXTEstacion1.getListaLinea());
    TransformarTXT transformarTXTestacion2 = new TransformarTXT();
    transformarTXTestacion2.transformarDatosEstacion(lectorTXTEstacion2.getListaLinea());

    GeneradorTimeSerie timeSerieTXT1 = new GeneradorTimeSerie();
    timeSerieTXT1.setTransformarTXT(transformarTXTestacion1);
    GeneradorTimeSerie timeSerieTXT2 = new GeneradorTimeSerie();
    timeSerieTXT2.setTransformarTXT(transformarTXTestacion2);

    timeSerieTXT1.crearTimeSerieTXT();
    timeSerieTXT2.crearTimeSerieTXT();

    TimeSeriesCollection UNO1 = new TimeSeriesCollection();
    TimeSeriesCollection DOS1 = new TimeSeriesCollection();
    TimeSeriesCollection TRES1 = new TimeSeriesCollection();

    TimeSeriesCollection UNO2 = new TimeSeriesCollection();
    TimeSeriesCollection DOS2 = new TimeSeriesCollection();
    TimeSeriesCollection TRES2 = new TimeSeriesCollection();

    UNO1.addSeries(timeSerieTXT1.getSerieDOSmasERROR());
    UNO1.addSeries(timeSerieTXT1.getSerieDOS());
    UNO1.addSeries(timeSerieTXT1.getSerieDOSmenosERROR());

    DOS1.addSeries(timeSerieTXT1.getSerieDOSmasERROR());
    DOS1.addSeries(timeSerieTXT1.getSerieDOS());
    DOS1.addSeries(timeSerieTXT1.getSerieDOSmenosERROR());

    TRES1.addSeries(timeSerieTXT1.getSerieTRESmasERROR());
    TRES1.addSeries(timeSerieTXT1.getSerieTRES());
    TRES1.addSeries(timeSerieTXT1.getSerieTRESmenosERROR());

    UNO2.addSeries(timeSerieTXT2.getSerieDOSmasERROR());
    UNO2.addSeries(timeSerieTXT2.getSerieDOS());
    UNO2.addSeries(timeSerieTXT2.getSerieDOSmenosERROR());

    DOS2.addSeries(timeSerieTXT2.getSerieDOSmasERROR());
    DOS2.addSeries(timeSerieTXT2.getSerieDOS());
    DOS2.addSeries(timeSerieTXT2.getSerieDOSmenosERROR());

    TRES2.addSeries(timeSerieTXT2.getSerieTRESmasERROR());
    TRES2.addSeries(timeSerieTXT2.getSerieTRES());
    TRES2.addSeries(timeSerieTXT2.getSerieTRESmenosERROR());

    XYDataset datasetUNO1 = UNO1;
    XYDataset datasetDOS1 = DOS1;
    XYDataset datasetTRES1 = TRES1;

    XYDataset datasetUNO2 = UNO2;
    XYDataset datasetDOS2 = DOS2;
    XYDataset datasetTRES2 = TRES2;

    NumberAxis rangeAxis11 = new NumberAxis("Norte cm");
    rangeAxis11.setAutoRangeIncludesZero(false);             
    XYItemRenderer renderer11 = new StandardXYItemRenderer();
    renderer11.setSeriesPaint(0, Color.decode("#C1ECFF"));
    renderer11.setSeriesPaint(2, Color.decode("#C1ECFF"));
    renderer11.setSeriesPaint(1, Color.decode("#00067F"));
    XYPlot subplot11 = new XYPlot(datasetUNO1, null, rangeAxis11, renderer11);

    NumberAxis rangeAxis21 = new NumberAxis("Este cm");
    rangeAxis21.setAutoRangeIncludesZero(false);             
    XYItemRenderer renderer21 = new StandardXYItemRenderer();
    renderer21.setSeriesPaint(0, Color.decode("#A8FFA4"));
    renderer21.setSeriesPaint(2, Color.decode("#A8FFA4"));
    renderer21.setSeriesPaint(1, Color.decode("#15FF1B"));

    XYPlot subplot21 = new XYPlot(datasetDOS1, null, rangeAxis21, renderer21);

    NumberAxis rangeAxis31 = new NumberAxis("Vertical cm");
    rangeAxis31.setAutoRangeIncludesZero(false);             
    XYItemRenderer renderer31 = new StandardXYItemRenderer();
    renderer31.setSeriesPaint(0, Color.decode("#FF8B8A"));
    renderer31.setSeriesPaint(2, Color.decode("#FF8B8A"));
    renderer31.setSeriesPaint(1, Color.decode("#FF0800"));        

    XYPlot subplot31 = new XYPlot(datasetTRES1, null, rangeAxis31, renderer31);


    ValueAxis domainAxis1 = new DateAxis();
    CombinedDomainXYPlot plot1 = new CombinedDomainXYPlot();
    plot1.setDomainAxis(domainAxis1);

    plot1.add(subplot11, 1);
    plot1.add(subplot21, 1);
    plot1.add(subplot31, 1);

    plot1.setOrientation(PlotOrientation.VERTICAL);


    NumberAxis rangeAxis12 = new NumberAxis("Norte cm");
    rangeAxis12.setAutoRangeIncludesZero(false);          
    XYItemRenderer renderer12 = new StandardXYItemRenderer();
    renderer12.setSeriesPaint(0, Color.decode("#C1ECFF"));
    renderer12.setSeriesPaint(2, Color.decode("#C1ECFF"));
    renderer12.setSeriesPaint(1, Color.decode("#00067F"));

    XYPlot subplot12 = new XYPlot(datasetUNO2, null, rangeAxis12, renderer12);

    NumberAxis rangeAxis22 = new NumberAxis("Este cm");
    rangeAxis22.setAutoRangeIncludesZero(false);          
    XYItemRenderer renderer22 = new StandardXYItemRenderer();
    renderer22.setSeriesPaint(0, Color.decode("#A8FFA4"));
    renderer22.setSeriesPaint(2, Color.decode("#A8FFA4"));
    renderer22.setSeriesPaint(1, Color.decode("#15FF1B"));

    XYPlot subplot22 = new XYPlot(datasetDOS2, null, rangeAxis22, renderer22);

    NumberAxis rangeAxis32 = new NumberAxis("Vertical cm");
    rangeAxis32.setAutoRangeIncludesZero(false);          
    XYItemRenderer renderer32 = new StandardXYItemRenderer();
    renderer32.setSeriesPaint(0, Color.decode("#FF8B8A"));
    renderer32.setSeriesPaint(2, Color.decode("#FF8B8A"));
    renderer32.setSeriesPaint(1, Color.decode("#FF0800"));        

    XYPlot subplot32 = new XYPlot(datasetTRES2, null, rangeAxis32, renderer32);


    ValueAxis domainAxis2 = new DateAxis();
    CombinedDomainXYPlot plot2 = new CombinedDomainXYPlot();
    plot2.setDomainAxis(domainAxis2);

    plot2.add(subplot12, 1);
    plot2.add(subplot22, 1);
    plot2.add(subplot32, 1);

    plot2.setOrientation(PlotOrientation.VERTICAL);


    JFreeChart a = new JFreeChart("Linea: ",JFreeChart.DEFAULT_TITLE_FONT, plot, false);
    JFreeChart b = new JFreeChart("Estacion GPS: ",JFreeChart.DEFAULT_TITLE_FONT, plot1, false);
    JFreeChart c = new JFreeChart("Estacion GPS: ",JFreeChart.DEFAULT_TITLE_FONT, plot2, false);

    ChartPanel panel = new ChartPanel(a, true, true, true, true, true);
    ChartPanel panel2 = new ChartPanel(b, true, true, true, true, true);
    ChartPanel panel3 = new ChartPanel(c, true, true, true, true, true);




    Dimension dmnsn = new Dimension(950, 500);
    Dimension dmnsn2 = new Dimension(1900, 500);

    panel.setMaximumDrawHeight(500);
    panel.setMinimumDrawHeight(450);
    panel.setMaximumDrawWidth(1900);
    panel.setMinimumDrawWidth(950);

    panel.setMinimumSize(dmnsn2);
    panel2.setMinimumSize(dmnsn);
    panel3.setMinimumSize(dmnsn);

    JFrame frame = new JFrame("VOLCAN");
    JPanel asd = new JPanel();
    asd.setLayout(new GridBagLayout());
    GridBagConstraints csd = new GridBagConstraints();
    JLabel volcan = new JLabel("el volcan");


    csd.gridx = 0;
    csd.gridy = 0;
    csd.gridwidth = 2;
    asd.add(volcan, csd);
    frame.add(asd);

    csd.gridx = 0;
    csd.gridy = 1;
    csd.gridwidth = 1;
    asd.add(panel3, csd);
    frame.add(asd);

    csd.gridx = 1;
    csd.gridy = 1;
    csd.gridwidth = 1;
    asd.add(panel2, csd);
    frame.add(asd);

    csd.gridx = 0;
    csd.gridy = 2;
    csd.gridwidth =2;
    asd.add(panel, csd);




    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
...