Gráfico de vários dados com "TimeSeries"

Estou tentando criar um gráfico onde cada dado esteja em um “quadro” (ou gráfico) diferente, com todos os dados tendo uma espécie de “base”, um dado que seria igual pra todos (no caso aqui seria a data no eixo X).

Tentei, tentei e falhei miseravelmente. Depois achei na internet um gráfico que é exatamente o que eu preciso, só que nao tem uma linha de código dele pra eu me basear, apenas a foto. É esse (no meu caso todos os gráficos seriam do mesmo formato, de linha):

JFreeChartVerticalCombineChart

O que eu estou fazendo é me basear por dois gráficos do mesmo site, tentando “uní-los” e aí virar o gráfico que eu quero. Porém nao consigo fazer o “TimeSeries” mostrar mais de uma “serie”, por assim dizer (outro “quadro” no mesmo frame).

Aqui estao os links, um é pro “frame com vários gráficos” e outro é pra um “TimeSeries”, onde a data é a base do gráfico. Pra voces que já tem muito mais conhecimento e experiencia com Java imagino que ao momento que vejam os códigos já vao saber como “uní-los” pra fazer um igual ao da foto acima.

“Combined Chart”: http://www.java2s.com/Code/Java/Chart/JFreeChartCombinedXYPlotDemo1.htm
“Time Series”: http://www.java2s.com/Code/Java/Chart/JFreeChartTimeSeriesDemo.htm

Abaixo posto meu código.

Esse é meu código. Criei dois “datasets” no formato TimeSeries. Meus problemas estao aqui nesse método “criar gráfico”, nao consegui pegar a lógica de como ter as datas no eixo X servindo de base pros dados de mais de um gráfico (ou quadro, como queiram chamar). Aqui meu método “createChart”:

 private JFreeChart createChart() {
    
    // chamando e "organizando" primeiro dataset
    final XYDataset data0 = createDataset0();
    final XYItemRenderer renderer0 = new StandardXYItemRenderer();
    final NumberAxis rangeAxis1 = new NumberAxis("Rango 1");
    final XYPlot subplot1 = new XYPlot(data0, null, rangeAxis1, renderer0);
    subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
    
    // chamando e "organizando" segundo dataset
    final XYDataset data1 = createDataset1();
    final XYItemRenderer renderer1 = new StandardXYItemRenderer();
    final NumberAxis rangeAxis2 = new NumberAxis("Rango 2");
    final XYPlot subplot2 = new XYPlot(data1, null, rangeAxis2, renderer1);
    subplot2.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
    
    final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Data"));
    
    plot.add(subplot1, 1);
    plot.add(subplot2, 2);
    plot.setOrientation(PlotOrientation.VERTICAL);
    
    final DateAxis axisData = (DateAxis) plot.getDomainAxis();
    axisData.setDateFormatOverride(new SimpleDateFormat("MM-yyyy"));
    
    return new JFreeChart("Titulo do Gráfico", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

Me sai um erro assim, sem mostrar uma linha específica: "Exception in thread “main” org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period mayo 2003 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method."

Plot.addOrUpdate

1 curtida

O que acontecia era que eu estava tentando adicionar o “addOrUpdate” dentro do método createChart, junto com os plots e subplots.

Na verdade eles devem ser adicionados dentro do método onde se criam os dados (createDataset, no meu caso), por exemplo:

 serie1.addOrUpdate(new Month(9, 2019), 100);

Aí funcionou!